wikipost mw https://www.marcelpost.com/wiki/index.php/Main_Page MediaWiki 1.39.10 first-letter Media Special Talk User User talk Wikipost Wikipost talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk File:Green figbird 03341.jpg 6 521 2042 1970-01-01T01:54:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 OriginalStartPage 0 2 4 2011-08-30T00:42:53Z Admin 1 New page: <big>'''MediaWiki has been successfully installed.'''</big> Consult the [http://meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software. == Getting... wikitext text/x-wiki <big>'''MediaWiki has been successfully installed.'''</big> Consult the [http://meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software. == Getting started == * [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list] * [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ] * [http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list] 08fc850f2898611c250d639e30f69532b5a016f8 Projects 0 3 6 2011-08-30T01:24:16Z Admin 1 New page: projects wikitext text/x-wiki projects b37b5674e3d09445a4d65889a79251ca6aab804b Wikipost:Privacy policy 4 6 12 2011-08-30T01:56:53Z Admin 1 New page: No Guarantee of Validity The contents of all material available on marcelpost.com are intended to provide useful information for its viewers. While we makes every effort to present accu... wikitext text/x-wiki No Guarantee of Validity The contents of all material available on marcelpost.com are intended to provide useful information for its viewers. While we makes every effort to present accurate and reliable information in its services, we does not endorse, approve, or certify such information, nor does it guarantee the accuracy, completeness, efficacy, timeliness, or correct sequencing of such information. Information on this site may or may not be current as of the date of your access, and we have no duty to update and maintain the information, reports, or statements on the Services. Additionally, the information on this site may be changed periodically without prior notice. All content on this site is provided "as is." Use of such information is voluntary, and reliance on it should only be undertaken after an independent review of its accuracy, completeness, efficacy, and timeliness. Additionally, please note that this site is a community-based question-and-answer service using the "wiki" approach of developing answers that the community constantly improves. For some pages we allow ANYONE at any time to write and edit content on this site. None of the licensors, contributors, sponsors, administrators, or anyone else connected with this site in any way whatsoever can be responsible for the appearance of any inaccurate information or for your use of the information contained in or linked from this site. External Links We also provides external links to other websites. We make no representation whatsoever regarding the content of any other websites that you may access from this site. We have no control over the content of these websites and cannot guarantee the reliability or accuracy of any information linked externally. No Professional Advice We provides professional information for informational purposes only, which should not be construed as advice. No action should be taken based upon any information contained on this site. You should seek independent professional advice from a person who is licensed and/or knowledgeable in the applicable area before acting upon any opinion, advice, or information contained on this site. 8c03ed7cc5f1780858245cd7e0e3e9d739d0ed96 Worklog 0 9 16 15 2011-08-30T02:02:10Z Admin 1 wikitext text/x-wiki Worklog <pre> #!/bin/sh # worklog # # (C)2010 Marcel Post. All Rights Reserved # Last modified: 22 December 2010 (optimised for Bashv4, possibly Dash too) # # This script tracks changes made to files in a target directory. # The way it works is that it will calculate the time between when # a file was first edited (poll every 5 minutes) and when the last # change was made (assuming that no edits were made for 60 minutes). # # For permissions, the cron executer must own the 'worklog' file # # Example cron entry: # # */5 * * * * /usr/local/bin/worklog /var/www/attendance [path-to-worklog-file] # # # BUGS # # once had that a file could not be 'stat' by worklog, as if it was locked by # vi when I was writing back the changes or so.. # # # TODO # - add a --help switch with version number etc # # User Variables: WL=worklog # name and location of the worklog file TMPDIR=/tmp # a temp directory that we can safely write to IDLEMINS=20 # when we should consider an edit to be finished DEBUG=0 # turn on for more verbose output # --- script follows --- if test $# -lt 1 then # no arguments provided echo "Syntax: worklog [path-to-worklog-file]" exit 1 fi if test $# -lt 2 then # one argument provided. Can either be: # -show to display the worklog file, or # to find changes in the 'path' files and directories and # write the updates to the worklog file located in 'path' if test $1 = "-show" then # use current directory to find the workdir file DEBUG=2 # set projectdir PROJECTDIR=`pwd` # set worklog file WORKLOG=$PROJECTDIR/$WL else # using project directory as specified with argument 1 # also use the path directory to find the worklog file if test -d $1 then # project dir exists ok PROJECTDIR=$1 # set worklog file WORKLOG=$PROJECTDIR/$WL else echo "Project directory does not exist" exit 1 fi fi else # at least two arguments provided. Can either be: # -show to display the worklog file in the # specified 'path' # update worklog in a possibly different # location than the 'path' specification if test $1 = "-show" then # use second argument to find the worklog file DEBUG=2 # set location of worklog file if test -f $2 then # worklog file exists ok WORKLOG=$2 else echo "Could not access worklog file at $2" echo "Please create a worklog file by running an update first" echo "Syntax: worklog [path-to-worklog-file]" exit 1 fi else # test if arguments link to an existing directory and a worklogfile if test -d $1 then # project dir exists ok PROJECTDIR=$1 else echo "Project directory does not exist" exit 1 fi # just set the name and location of the worklog file to the second argument # testing if it exists happens further in the script WORKLOG=$2 fi fi # uncomment for debugging purposes #if test $# -eq 2 #then # if test $2 = "-d" # then # DEBUG=1 # echo # fi # if test $2 = "-show" # then # # show real dates instead of timestamps # DEBUG=2 # echo # fi #fi # test if project directory exists if ! test -d $PROJECTDIR then echo "Project directory not found" exit 1 fi # test if logfile exists if test -f $WORKLOG then # -- check existing worklog file -- # check if worklog has a filesize greater than zero if test -s $WORKLOG then # check if we can recognise the header of the file WORKLOG_HEADER=`head -n 1 $WORKLOG` if test `echo $WORKLOG_HEADER | awk -F : '{print $1}'` = "LAST-CHANGED" > /dev/null 2>&1 then NEWFILE=0 else echo "The worklog file seems corrupt. Please check." echo "if possible delete $WORKLOG" exit 1 fi else NEWFILE=1 fi # check permissions if ! test -O $WORKLOG then if test $DEBUG != 2 then echo "File $WORKLOG is not owned by the user running this script! Exiting now." exit 1 fi fi # check if we have write permissions to the worklog file # who is running this script RUNUID=`set | grep ^UID | awk -F = '{print $2}'` #get stat from logfile LOGFSTAT=`/usr/bin/stat $WORKLOG | grep Uid` #check if Uid is same as the user running this script LOGF_PERMS=`echo $LOGFSTAT | awk -F Uid '{print $1}' | awk -F / '{print $2}' | cut -c 3` if test "$LOGF_PERMS" != "w" then echo "No write permissions to worklog file! Exiting now." exit 1 fi # Excellent! # if we're still in the running here, we've got: # # - an existing worklog file (maybe zero length) # - owned by the runner of this script # - with write permissions else # -- create new worklog file -- if test $DEBUG = 2 then echo "Please create a worklog file by running an update first" echo "Syntax: worklog [path-to-worklog-file]" exit 1 else echo "Worklog at $WORKLOG not found" echo -n "Attempting to create a new worklog file... " if touch $WORKLOG > /dev/null 2>&1 then echo "ok" if test $DEBUG = 1 then echo "new worklog created" fi NEWFILE=1 else echo "Permission denied!" exit 1 fi fi fi # -- part 1 b -- # show human readable dates and summarise time spent # if we were called with the -show argument now is the # time to display the worklog file using real date (ymd) # instead of timestamps. if test $DEBUG = 2 then echo "worklog for $1" TOTALTIME=0 TOTALTIME_W=0 TOTALTIME_C=0 MAXLINES=`grep -c minutes $WORKLOG` MAXLINES=$((MAXLINES + 2)) LINENR=3 PREVWEEK=0 DO_WEEKSUMMARY=0 while test $LINENR -le $MAXLINES do READLN=`cat $WORKLOG | head -n $LINENR | tail -n 1` # only process completed entries.. if echo $READLN | grep minutes > /dev/null 2>&1 then DO_PRINT=1 BEGINTIME=`echo $READLN | awk '{print $1}'` WEEKNR=`date -d @$BEGINTIME +%U` if test $PREVWEEK -eq 0 then PREVWEEK=$WEEKNR else if test $WEEKNR != $PREVWEEK then DO_WEEKSUMMARY=1 fi fi else # incomplete line detected. Don't print anything DO_PRINT=0 fi # show week summary line if test $DO_WEEKSUMMARY -eq 1 then if test $TOTALTIME -gt 0 then # new week detected TOTAL_HOURS_W=$((TOTALTIME_W / 60)) TOTAL_HXM_W=$((TOTAL_HOURS_W * 60)) TOTAL_MINUTES_W=$((TOTALTIME_W - TOTAL_HXM_W)) echo -n "Summary for week $PREVWEEK: $TOTALTIME_W minutes $TOTAL_HOURS_W h $TOTAL_MINUTES_W m" # cumulative week totals TOTALTIME_C=$((TOTALTIME_C + TOTALTIME_W)) TOTAL_HOURS_C=$((TOTALTIME_C / 60)) TOTAL_HXM_C=$((TOTAL_HOURS_C * 60)) TOTAL_MINUTES_C=$((TOTALTIME_C - TOTAL_HXM_C)) echo " ($TOTAL_HOURS_C h $TOTAL_MINUTES_C m)" echo "--" PREVWEEK=$WEEKNR fi DO_WEEKSUMMARY=0 TOTALTIME_W=0 fi BEGINTIME=`date -d @$BEGINTIME` ENDTIME=`echo $READLN | awk '{print $2}'` ENDTIME=`date -d @$ENDTIME` DIFFERENCE=`echo $READLN | awk '{print $3}'` TOTALTIME_W=$((TOTALTIME_W + DIFFERENCE)) TOTALTIME=$((TOTALTIME + DIFFERENCE)) # print entry on screen echo "$BEGINTIME to $ENDTIME = $DIFFERENCE minutes" # show week summary if we've reached the last line if test $LINENR -eq $MAXLINES then TOTAL_HOURS_W=$((TOTALTIME_W / 60)) TOTAL_HXM_W=$((TOTAL_HOURS_W * 60)) TOTAL_MINUTES_W=$((TOTALTIME_W - TOTAL_HXM_W)) echo -n "Summary for week $PREVWEEK: $TOTALTIME_W minutes $TOTAL_HOURS_W h $TOTAL_MINUTES_W m" # cumulative week totals TOTALTIME_C=$((TOTALTIME_C + TOTALTIME_W)) TOTAL_HOURS_C=$((TOTALTIME_C / 60)) TOTAL_HXM_C=$((TOTAL_HOURS_C * 60)) TOTAL_MINUTES_C=$((TOTALTIME_C - TOTAL_HXM_C)) if test $TOTALTIME_C -eq $TOTALTIME_W then echo else echo " ($TOTAL_HOURS_C h $TOTAL_MINUTES_C m)" fi echo "--" fi LINENR=$((LINENR + 1)) done echo "---------------------------" echo -n " $TOTALTIME minutes" TOTAL_HOURS=$((TOTALTIME / 60)) TOTAL_HXM=$((TOTAL_HOURS * 60)) TOTAL_MINUTES=$((TOTALTIME - TOTAL_HXM)) echo " $TOTAL_HOURS h $TOTAL_MINUTES m" exit 1 fi # -- part 2 -- # track changes # find out which file was lastly changed # the first line of the worklog file will be used to track changes # # Example: # LAST-CHANGED : 1273572131 left.php # get just the file name of a regular file that was changed last LC_FILENAME=`/bin/ls -tr1 $PROJECTDIR | grep -v $WL | tail -n 1` # get the timestamp for this file LC_TIMESTAMP=`/usr/bin/stat --format=%Y $PROJECTDIR/$LC_FILENAME` # compare this with what's in the worklog # -- create worklog header in case of new file -- if test $NEWFILE = 1 then WORKLOG_HEADER="LAST-CHANGED : $LC_TIMESTAMP $LC_FILENAME" echo $WORKLOG_HEADER > $WORKLOG echo "--" >> $WORKLOG if test $DEBUG = 1 then echo "created new worklog header for file: $LC_FILENAME" fi fi # update the header if a change has been detected if echo $WORKLOG_HEADER | grep -e "$LC_TIMESTAMP $LC_FILENAME" > /dev/null 2>&1 then # no changes detected CHANGES=0 if test $DEBUG = 1 then echo "no changes detected" fi else CHANGES=1 # a recent change has been made if test $DEBUG = 1 then echo "changes detected in file: $LC_FILENAME" echo "updating header" fi # update the worklog header # get the total number of lines in the worklog (minus one) WL_MAXLINES=`wc -l $WORKLOG | awk '{print $1}'` WL_MAXLINES=$((WL_MAXLINES - 1)) #set the new header WORKLOG_HEADER="LAST-CHANGED : $LC_TIMESTAMP $LC_FILENAME" #rewrite the worklog file cat $WORKLOG | tail -n $WL_MAXLINES > $TMPDIR/tmpfil_worklog.001 echo $WORKLOG_HEADER > $WORKLOG cat $TMPDIR/tmpfil_worklog.001 >> $WORKLOG rm $TMPDIR/tmpfil_worklog.001 fi # -- lastline updating -- # get the last line of the worklog WL_LASTLINE=`tail -n 1 $WORKLOG` WL_LL_LENGTH=${#WL_LASTLINE} # the length of the line is an indication as to what's written in it # length up to 18 chars = unknown # length is greater than 30 chars = minutes have been calculated if test $CHANGES = 1 then if test $WL_LL_LENGTH = 2 || test $WL_LL_LENGTH -gt 18 then # open new lastline WL_LASTLINE="$LC_TIMESTAMP unknown" echo $WL_LASTLINE >> $WORKLOG if test $DEBUG = 1 then echo "opening new tracker line" fi fi fi # -- timestamp updating -- # are we checking after the idle time? # get timestamp for right now TIME_NOW=`date +%s` # create timestamp for LC_TIMESTAMP + ( N x 60 ) IDLESECS=$((IDLEMINS * 60)) TIMESTAMP_IDLE=$((LC_TIMESTAMP + IDLESECS)) # test if our present time is the IDLE time past the Last Changed time if test $TIME_NOW -gt $TIMESTAMP_IDLE then # we're past our idle time # update 'unknown' with the last known time from the header # and calculate the difference # # just exit if unkown is not the last keyword if test $WL_LL_LENGTH = 18 then # line has not been closed yet, do so now if test $DEBUG = 1 then echo "past idle time, closing tracker line" fi # get the last known change time from the header WL_TS=`head -n 1 $WORKLOG | awk '{print $3}'` #rewrite the last line of the logfile # get the total number of lines in the worklog (minus one) WL_MAXLINES=`wc -l $WORKLOG | awk '{print $1}'` WL_MAXLINES=$((WL_MAXLINES - 1)) #set the lastline with an updated timestamp WL_LASTLINE_PRE=`echo "$WL_LASTLINE" | awk '{print $1}'` #calculate the time between start and finish WL_STARTTIME=`tail -n 1 $WORKLOG | awk '{print $1}'` TIMESPAN=$((WL_TS - WL_STARTTIME)) TIMESPAN=$((TIMESPAN / 60)) WL_LASTLINE="$WL_LASTLINE_PRE $WL_TS $TIMESPAN minutes" #rewrite the worklog file cat $WORKLOG | head -n $WL_MAXLINES > $TMPDIR/tmpfil_worklog.001 cat $TMPDIR/tmpfil_worklog.001 > $WORKLOG if [ $TIMESPAN -le 0 ] || [ $TIMESPAN -gt 720 ] then # ignore updating the last line, it was probably faulty anyway echo > /dev/null if test $DEBUG = 1 then echo "timespan zero, negative or too big, not writing tracker line" echo "details:" echo "original starttime: $WL_STARTTIME" echo "last changed time: $WL_TS" fi else echo $WL_LASTLINE >> $WORKLOG if test $DEBUG = 1 then echo "updating tracker line with timespan" fi fi rm $TMPDIR/tmpfil_worklog.001 fi fi if test $DEBUG = 1 then echo "Timestamp now: `date +%s` `date`" fi # That's all folks </pre> 295edeafcc9ace66279f1586d2a52434016e42e3 Bombs 0 10 18 17 2011-08-30T02:03:38Z Admin 1 wikitext text/x-wiki Classic Bash creativity: <pre> :(){ :|:& };: </pre> To prevent it, make sure /etc/security/limits.conf has something sensible: vivek hard nproc 300 @student hard nproc 50 @faculty soft nproc 100 @pusers hard nproc 200 Above will prevent anyone in the student group from having more than 50 processes, faculty and pusers group limit is set to 100 and 200. Vivek can create only 300 process. Please note that KDE and Gnome desktop system can launch many process. e0927076cfb9dc6554657460b36651c77a13060f WebLinks 0 12 22 21 2011-08-30T02:08:29Z Admin 1 wikitext text/x-wiki A Collection of Web Links coverting various fields of interest * [[Links:News]] * [[Links:Computers_and_IT]] * [[Links:Electronics]] * [[Links:myweblinks]] * [[Links:Travel]] * [[Links:Sky_and_Weather]] ca5d4866dcd15ef9d9c80557d40fd5555778bd43 Links:myweblinks 0 4 23 8 2011-08-30T02:09:30Z Admin 1 [[Myweblinks]] moved to [[Links:myweblinks]] wikitext text/x-wiki A collection of web links. ==General Interest:== [http://slashdot.org SlashDot] [http://www.gizmag.com GizMag] [http://www.ted.org TED] ==Electronics== http://www.ozelecforum.com ==Financial== [http://www.google.com/finance?q=INDEXDJX:.DJI Dow Jones] [http://www.x-rates.com/d/AUD/table.html Exchange Rates] [http://www.mortgagechoice.com.au/calculators/home-loan-repayments-calculator.aspx Loan Repayments Calculator] ==Entertainment== * [[Movies]] ==Other== [http://www.stumbleupon.com/home/ StumbleUpon] [http://www.timeanddate.com/worldclock/ World Clock] b52966fcdce8d9b393df7691df70ec2bd89fc27c Myweblinks 0 13 24 2011-08-30T02:09:31Z Admin 1 [[Myweblinks]] moved to [[Links:myweblinks]] wikitext text/x-wiki #REDIRECT [[Links:myweblinks]] ed582c2419f3517ed433dd434c7159f0ef3cf815 Groningen 0 20 35 34 2011-08-30T03:33:24Z Admin 1 wikitext text/x-wiki [http://en.wikipedia.org/wiki/Groningen_%28city%29 The entry for Groningen on Wikipedia] [http://maps.google.com.au/maps?q=groningen&oe=utf-8&rls=org.mozilla:en-GB:official&client=firefox-a&um=1&ie=UTF-8&hq=&hnear=0x47c83286b462cca7:0xcb4b5086f9a6c8dc,Groningen,+Netherlands&gl=au&ei=irrlTb-WFZCevgO4o-TuCg&sa=X&oi=geocode_result&ct=title&resnum=1&ved=0CCoQ8gEwAA Google Maps image] [http://www.groningermuseum.nl Groninger Museum] [http://www.rug.nl/corporate/index Rijksuniversiteit Groningen] [http://www.rtvnoord.nl/ Radio & TV Noord] [http://www.martiniplaza.nl/ Martini Plaza (Martinihal)] [http://www.fcgroningen.nl/ FC Groningen Soccer Club] See also: [[Cities]], [[Links:Sky and Weather]] a5fe6c725b1ebfd3c73800a744d30a543860fb4e Newcastle 0 21 36 2011-08-30T03:34:16Z Admin 1 New page: [http://en.wikipedia.org/wiki/Newcastle,_New_South_Wales wikipedia entry for Newcastle on Wikipedia] [http://maps.google.com.au/maps?q=newcastle+nsw&oe=utf-8&rls=org.mozilla:en-GB:officia... wikitext text/x-wiki [http://en.wikipedia.org/wiki/Newcastle,_New_South_Wales wikipedia entry for Newcastle on Wikipedia] [http://maps.google.com.au/maps?q=newcastle+nsw&oe=utf-8&rls=org.mozilla:en-GB:official&client=firefox-a&um=1&ie=UTF-8&hq=&hnear=0x6b733e1371c702e5:0x4017d681632a8a0,Newcastle+NSW&gl=au&ei=lLzlTcGaBo6YvAPh-JHxCg&sa=X&oi=geocode_result&ct=title&resnum=1&ved=0CCYQ8gEwAA Google Maps image] [http://www.visitnewcastle.com.au/ Visit Newcastle Tourism site] [http://www.newcastle.nsw.gov.au/ Newcastle City Council] [http://www.newcastle.edu.au/ University of Newcastle] [http://www.newcastle.edu.au/school/drama-fine-art-music-conservatorium/areas/conservatorium/ Conservatorium] [http://www.newportcorp.com.au/site/index.cfm Newcastle Port Corporation] See also: [[Cities]], [[Links:Sky and Weather]] ec02a4cb7b8f910a121181c20c146f0a9039d7e3 Links:Sky and Weather 0 22 37 2011-08-30T03:34:37Z Admin 1 New page: ==Weather== Australia [http://www.bom.gov.au Bureau of Meteorology] [http://www.essentialenergy.com.au/content/stormtracker Storm Tracker] ==Astronomy== http://www.heavens-above.com/... wikitext text/x-wiki ==Weather== Australia [http://www.bom.gov.au Bureau of Meteorology] [http://www.essentialenergy.com.au/content/stormtracker Storm Tracker] ==Astronomy== http://www.heavens-above.com/ See also: [[WebLinks]], [[Cities]] c72e17e59d26b0a5aad01b4a38082785559efecb Links:Travel 0 19 38 32 2011-08-30T03:35:26Z Admin 1 wikitext text/x-wiki A collection of various Travel Links ==Airports== [http://www.sydneyairport.com.au/ Sydney, Australia] [http://www.hongkongairport.com/eng/index.html Hong Kong] [http://www.schiphol.nl/ Amsterdam, Netherlands] ==Train Networks== [http://www.cityrail.info/ CityRail NSW, Australia] [http://www.ns.nl/ NS, Netherlands] ==Miscellaneous== [http://www.x-rates.com/ Exchange Rates] [http://www.timeanddate.com/worldclock/ World Times] See also: [[Cities]], [[WebLinks]] d45cf01de36ad8ead5059344e6051d4deb36574f Cities 0 23 39 2011-08-30T03:35:39Z Admin 1 New page: ==Europe== The Netherlands * [[Groningen]] ==Oceania== Australia * [[Newcastle]] See also:[[WebLinks]], [[Links:Sky and Weather]] wikitext text/x-wiki ==Europe== The Netherlands * [[Groningen]] ==Oceania== Australia * [[Newcastle]] See also:[[WebLinks]], [[Links:Sky and Weather]] f22ab35ed7a971c38272ae822347015b8961158d Links:Electronics 0 18 40 31 2011-08-30T03:36:35Z Admin 1 wikitext text/x-wiki * Manufacturers Atmel (AVR) http://www.atmel.com/products/avr Microchip (PIC) http://www.microchip.com/ Phoenix Contact Australia http://www.phoenixcontact.com.au/ * Retail Sales Jaycar http://www.jaycar.com.au/ Dick Smith Electronics http://www.dse.com.au/ * Electronics Forums OzElecForum http://www.ozelecforum.com/ AVR Freaks http://www.avrfreaks.net/ See also: [[Datasheets]], [[WebLinks]] Electronics [[Electronics_Projects]] See also: [[Links:Electronics]] 7f069bca93a2b34800f9e65faf51e5ce6e640bfc File:ATtiny85.pdf 6 26 43 2011-08-30T03:55:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-schematic.PNG 6 28 49 2011-08-30T04:06:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-pcb-top-assy.PNG 6 29 51 2011-08-30T04:08:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ATtiny84.pdf 6 30 53 2011-08-30T05:44:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ATmega328.pdf 6 31 54 2011-08-30T05:44:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:DS1820.pdf 6 32 55 2011-08-30T05:46:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:DS18S20.pdf 6 33 56 2011-08-30T05:46:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:74HC595.pdf 6 34 57 2011-08-30T05:47:36Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:SD1602G.pdf 6 35 59 2011-08-30T05:48:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nokia5110-LCD.pdf 6 36 60 2011-08-30T05:49:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:I2C-UM10204.pdf 6 37 61 2011-08-30T05:49:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Mcu 0055 Rs232-tempsensor 2011-08-02.tar.gz 6 38 62 2011-08-30T05:52:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:CP210x VCP Win XP S2K3 Vista 7.zip 6 39 64 2011-08-30T05:55:56Z Admin 1 CP210x USB to UART Bridge VCP Drivers The CP210x USB to UART Bridge Virtual COM Port (VCP) drivers are required for device operation as a Virtual COM Port to facilitate host communication with CP210x products. These devices can also interface to a host u wikitext text/x-wiki CP210x USB to UART Bridge VCP Drivers The CP210x USB to UART Bridge Virtual COM Port (VCP) drivers are required for device operation as a Virtual COM Port to facilitate host communication with CP210x products. These devices can also interface to a host using the USBXpress direct access driver. Download for Windows XP/Server 2003/Vista/7 (v6.4) The CP210x Manufacturing DLL and Runtime DLL have been updated and must be used with v6.0 and later of the CP210x Windows VCP Driver. Application Note Software downloads affected are AN144SW.zip, AN205SW.zip and AN223SW.zip. If you are using a 5.x driver and need support you can download archived Application Note Software. 46d7e048c2f662ee7689b64431eedf0ac970313a File:Mcu 0050 tempsensor 20110601.tar.gz 6 41 68 2011-08-30T05:58:27Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:DIP8.jpg 6 42 70 2011-08-30T06:04:42Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-ser-temps-board bot.JPG 6 43 72 2011-08-31T23:10:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-ser-temps-board side.JPG 6 44 73 2011-08-31T23:11:16Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-ser-temps-board top.JPG 6 45 74 2011-08-31T23:11:47Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-ser-temps-board usb.JPG 6 46 75 2011-08-31T23:12:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-lcd-i2c.jpg 6 49 81 2011-08-31T23:22:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-lcd-i2c clean.zip 6 50 83 2011-09-01T00:06:56Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Transfer contacts between iphone and android 0 52 86 2011-09-01T06:39:03Z Admin 1 New page: * open itunes and connect iphone * set up ‘merge’ synchronise with windows address book * close itunes, disconnect iphone * open windows address book from ‘programs – accessories... wikitext text/x-wiki * open itunes and connect iphone * set up ‘merge’ synchronise with windows address book * close itunes, disconnect iphone * open windows address book from ‘programs – accessories’ * create a new folder on the desktop * drag all contacts into the new folder (individual .vcf files will be created) * copy all the contacts to the root directory of the sdcard (or transfer via bluetooth) * on android phone, click ‘contacts’ * press the menu button, click ‘import / export’ * select ‘Import from SD card’ * select ‘Import all vCard files’ and press ‘OK’ 5f2a4766150bdedcea6734f64a98e4232d5aa31b Android apps 0 53 90 89 2011-09-01T06:44:51Z Admin 1 wikitext text/x-wiki Handy Android apps: [https://market.android.com/details?id=it.medieval.blueftp&hl=en Bluetooth OBEX file transfer] [https://market.android.com/details?id=mobi.infolife.appbackup&feature=search_result App Backup & Restore] 3558285b8b3128f3febe776db8564d56fdf55871 Links:Computers and IT 0 17 91 87 2011-09-01T06:46:44Z Admin 1 wikitext text/x-wiki Links relating to Computers and IT http://www.securityfocus.com/ [[Android_apps]] [[Basic_ssl_encryption]] See also: [[WebLinks]] 7e8a091db246c7c55901ac7f5177c65a2510df0d File:0051-bottom.jpg 6 55 93 2011-09-02T00:06:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-side-with-lcd.jpg 6 56 95 2011-09-02T00:06:59Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-top-bare.jpg 6 57 96 2011-09-02T00:07:33Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-top-with-lcd.jpg 6 58 97 2011-09-02T00:08:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Wikipost:Community Portal 4 59 106 105 2011-09-02T03:41:45Z Admin 1 wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ == == dbc4729d9899c12d93d3cddc90e70f3f796baa3b Wikipost:About 4 60 107 2011-09-02T04:54:45Z Admin 1 New page: Please use the blog for feedback: http://au-blogg.blogspot.com/ == == wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ == == 725d9652bfec832200e0fa41772587f8a540f53d Talk:Mcu 0051-lcd-i2c-board 1 62 113 2011-09-03T04:36:31Z Admin 1 Created page with " Please use the blog for feedback: http://au-blogg.blogspot.com/ == ==" wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ == == 13ead54ca0ccd0b241cc65c63c937b2cbf0e6be3 Wikipost talk:About 5 63 114 2011-09-03T10:14:20Z Admin 1 Created page with " Please use the blog for feedback: http://au-blogg.blogspot.com/ == ==" wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ == == 3ab4bde37e7a566426802bdcedda175c033fa970 Talk:Main Page 1 64 118 117 2011-09-03T10:24:57Z Admin 1 wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ 27c34c3b91b61dace5ef1cf0ba12ddaa85c0b922 File:0051-schematic.png 6 65 119 2011-09-07T03:39:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-schematic.pdf 6 66 122 2011-09-07T23:02:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-schematic.jpg 6 67 136 123 2011-09-07T23:19:33Z Admin 1 uploaded a new version of "[[File:0051-schematic.jpg]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0057-lcd-i2c-eval-board.jpg 6 69 140 2011-09-11T23:40:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0057-lcd-i2c-eval-board diptrace.zip 6 70 142 2011-09-11T23:57:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 C Programs 0 71 145 2011-09-13T11:10:01Z Admin 1 Created page with "Some of my Electronics projects work in a client-server type fashion where the Electronics project is enhanced by (or in some case cannot work without) some form of counterpart i…" wikitext text/x-wiki Some of my Electronics projects work in a client-server type fashion where the Electronics project is enhanced by (or in some case cannot work without) some form of counterpart in the form of a piece of software that resides on another device (e.g. a PC running some kind of operating system). 657f49a664a4599d43e0462ac189306fd261d103 Programming Languages 0 73 150 2011-09-13T11:16:51Z Admin 1 moved [[Programming Languages]] to [[Programs]] wikitext text/x-wiki #REDIRECT [[Programs]] 997339ef039920f9e37e72924b5efe036dc7466b Links:News 0 24 165 164 2011-09-13T11:29:32Z Admin 1 wikitext text/x-wiki A Collection of News Links * Science and Technology http://slashdot.org/ http://www.gizmag.com/ * World News Organisations http://www.abc.net.au http://www.cnbc.com See also: [[WebLinks]] 39074ad920b73871f7e325ea5236f623a85d03f3 Wikipost:General disclaimer 4 7 168 167 2011-09-13T11:32:50Z Admin 1 wikitext text/x-wiki No Guarantee of Validity The contents of all material available on marcelpost.com are intended to provide useful information for its viewers. While we make every effort to present accurate and reliable information in its services, we does not endorse, approve, or certify such information, nor does it guarantee the accuracy, completeness, efficacy, timeliness, or correct sequencing of such information. Information on this site may or may not be current as of the date of your access, and we have no duty to update and maintain the information, reports, or statements on the Services. Additionally, the information on this site may be changed periodically without prior notice. All content on this site is provided "as is." Use of such information is voluntary, and reliance on it should only be undertaken after an independent review of its accuracy, completeness, efficacy, and timeliness. Additionally, please note that this site is a community-based question-and-answer service using the "wiki" approach of developing answers that the community constantly improves. For some pages we allow ANYONE at any time to write and edit content on this site. None of the licensors, contributors, sponsors, administrators, or anyone else connected with this site in any way whatsoever can be responsible for the appearance of any inaccurate information or for your use of the information contained in or linked from this site. External Links We also provides external links to other websites. We make no representation whatsoever regarding the content of any other websites that you may access from this site. We have no control over the content of these websites and cannot guarantee the reliability or accuracy of any information linked externally. No Professional Advice We provide professional information for informational purposes only, which should not be construed as advice. No action should be taken based upon any information contained on this site. You should seek independent professional advice from a person who is licensed and/or knowledgeable in the applicable area before acting upon any opinion, advice, or information contained on this site. 06d955b2561923b26103c25e53c2a0446d4a7ad7 File:Diptrace Libraries mpost 2011-09-14.zip 6 76 171 2011-09-14T12:07:47Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Diptrace 0 75 172 170 2011-09-14T12:08:43Z Admin 1 wikitext text/x-wiki Diptrace is the program I use these days for designing my circuits and PCB's. The software is available as a freeware version with support for up to 500 pads, which is (for the moment) more than enough for me. For more information on diptrace: http://www.diptrace.com/ Diptrace has many component libraries but I've also created one of my own that I'm happy to share here. [[File:Diptrace Libraries mpost 2011-09-14.zip]] 946f53bfc17e3530ba2ff498eb1a1ac3b98bea7e File:I2c-demo.swf 6 77 173 2011-09-15T23:11:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Blank:mcu project 0 81 275 2011-09-19T11:36:36Z Admin 1 Created page with "{{Infobox | name = projectname | image = [[Image:blank.jpg|150px]] | imagecaption = description | author = Marcel Post | mcu = mcu_type | initial_release_date = Month Year | last…" wikitext text/x-wiki {{Infobox | name = projectname | image = [[Image:blank.jpg|150px]] | imagecaption = description | author = Marcel Post | mcu = mcu_type | initial_release_date = Month Year | last_modified_date = Month Year | pcb_layers = n | project_status = status }} Short description <br> <br> ==Description== ==Timeline== ==Schematic== ==Circuit Board== ==Software== Latest source code: ==Release Notes== ==Gallery== ==External Links== http://www.atmel.com/avr/ 181af2d318331a870171bce7fb041b7cf3439b51 File:0051-sch-v1.0.JPG 6 85 286 2011-09-21T10:35:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-I2C-LCD-board-v1.0.zip 6 86 290 2011-09-21T10:44:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:IC-SOIC8.jpg 6 88 313 2011-09-22T10:51:28Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Infobox 10 79 325 268 2011-09-22T11:16:09Z Admin 1 wikitext text/x-wiki <table class="infobox" align="right" bgcolor="#E1E1E1" style="width:20em; font-size:90%; text-align:left; margin:10px; border-spacing:5px 5px; border: 1px #c0c0c0 solid;"> <tr> <td colspan="2" bgcolor="#E1E1E1" style="text-align:center; font-size:110%"><b>{{{name}}}</b></td> <tr> <td colspan="2" style="text-align:center;" bgcolor="#FFFFFF">{{{image}}}</td> </tr> <tr> <td colspan="2" bgcolor="#FFFFFF" style="text-align:center;">{{{imagecaption}}}</td> </tr> <tr> <td colspan="2" bgcolor="#E1E1E1" style="text-align:center;"><b>Project Details</b></td> </tr> <tr> <th>Author</th> <td>{{{author}}}</td> </tr> <tr> <th>MCU</th> <td>{{{mcu}}}</td> </tr> <tr> <th>Initial Release</th> <td>{{{initial_release_date}}}</td> </tr> <tr> <th>Last Modified</th> <td>{{{last_modified_date}}}</td> </tr> <tr> <th>PCB Layers</th> <td>{{{pcb_layers}}}</td> </tr> <tr> <th>Status</th> <td>{{{project_status}}}</td> </tr> <tr> <th>Category:</th> <td>{{{category}}}</td> </tr> </table> 8a91be6ba1927e479e48a769d230baa453ac53fd Mcu 0058-ATtiny85-eval-board 0 90 326 323 2011-09-22T11:16:37Z Admin 1 wikitext text/x-wiki {{Infobox | name = ATtiny85 eval board | image = [[Image:blank.jpg|150px]] | imagecaption = no image yet | author = Marcel Post | mcu = ATyiny85 | initial_release_date = Month Year | last_modified_date = Month Year | pcb_layers = 2 | project_status = in development | category = [[Electronics]] }} The idea is to have a small form factor evaluation board that has room for a few basic components: * ATtiny85 (8 pin) * power socket * small section of blank pads (perhaps 10x10) * some LED's * ICSP connector * small pushbutton <br> <br> ==Description== ==Timeline== ==Schematic== ==Circuit Board== ==Software== Latest source code: ==Release Notes== ==Gallery== ==External Links== http://www.atmel.com/avr/ 9d3acfc536bce45d0cf984e6e9102d695a352e73 Mcu 0052-i2c-master 0 61 334 112 2011-09-22T11:31:49Z Admin 1 wikitext text/x-wiki {{Infobox | name = 0052-i2c-master | image = [[Image:blank.jpg|150px]] | imagecaption = no image yet | author = Marcel Post | mcu = ATtiny85 | initial_release_date = Month Year | last_modified_date = Month Year | pcb_layers = 2 | project_status = in development | category = [[Electronics]] }} A very simple board that acts as an I2C master. I designed it to test my I2C display boards. It just outputs some random data but it should be re-designed fairly simply to act as a somewhat more intelligent device. <br> <br> ==Description== ==Timeline== ==Schematic== ==Circuit Board== ==Software== Latest source code: ==Release Notes== ==Gallery== ==External Links== http://www.atmel.com/avr/ 374abe47b378d4942bd30ebb77e0705b20d5bbae Mcu 0056-nokia-48x84-i2c-board 0 89 335 321 2011-09-22T11:33:22Z Admin 1 wikitext text/x-wiki {{Infobox | name = 0056-nokia-48x84-i2c-board | image = [[Image:blank.jpg|150px]] | imagecaption = no image yet | author = Marcel Post | mcu = ATtiny84 | initial_release_date = Month Year | last_modified_date = Month Year | pcb_layers = 2 | project_status = in development | category = [[Electronics]] }} The idea is to have a small nokia display attached to a 14-pin ATtiny84 mcu. <br> <br> ==Description== This board will comfortably drive the display plus have a few pins left for other projects. This could be the basis for an eval board with display but for the moment I just have the use for an I2C display. It will be very similar to [[mcu_0051-lcd-i2c-board]] but now with a bigger display doing full graphics. No schematic nor prototype currently exist. ==Timeline== ==Schematic== ==Circuit Board== ==Software== Latest source code: ==Release Notes== ==Gallery== ==External Links== http://www.atmel.com/avr/ e5531c6835d07b4015f4a8272a02eba167580158 Mcu 0057-lcd-i2c-eval-board 0 68 337 336 2011-09-22T11:36:06Z Admin 1 wikitext text/x-wiki {{Infobox | name = 0050-ds1820-tempsensor | image = [[Image:blank.jpg|150px]] | imagecaption = no image yet | author = Marcel Post | mcu = ATtiny85 | initial_release_date = Month Year | last_modified_date = Month Year | pcb_layers = 2 | project_status = in development | category = [[Electronics]] }} Display board for I2C. <br> <br> ==Description== Similar to 0051 but with an AVR ATtiny84 (14 pin mcu) where all data pins are brought out to the front of a small work area of 6x25 pads) ==Timeline== ==Schematic== Schematic and pcb files (diptrace) [[File:0057-lcd-i2c-eval-board diptrace.zip]] ==Circuit Board== [[File:0057-lcd-i2c-eval-board.jpg]] Other boards I'm currently designing: [[Pending_PCB_manufacturing]] ==Software== ==Release Notes== ==Gallery== ==External Links== http://www.atmel.com/avr/ c17ec015c382ccd8a80dd8eae8b31c1dece7c3ec Miscellaneous-linux-info 0 93 344 2011-09-28T22:30:32Z Admin 1 Created page with "Bits of Linux information that is either too short to deserve their own page or it simply doesn't fit any other category. ==bash shell arithmetic== ==turn off console and xte…" wikitext text/x-wiki Bits of Linux information that is either too short to deserve their own page or it simply doesn't fit any other category. ==bash shell arithmetic== ==turn off console and xterm beeps and sounds== 2567472a7dbde0ccc3261664f5b667283e6fd8ee File:Dirsync-1.0.tar.gz 6 96 348 2011-09-28T22:58:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Dirsync 0 95 352 351 2011-09-29T00:22:13Z Admin 1 wikitext text/x-wiki Dirsync is a script I wrote to synchronise directories when a system boots up or shuts down. Background To provide some basic network functionality (DNS, logging stats, a webserver, etc..) I used to run Debian on a Linksys NSLU2 for many years. The NSLU2 is a small device, fanless with an internal Disk-on-chip (flash) for storing the original Operating System (with Debian it's running off a 1GB USB flash drive). Around June 2010 I upgraded to a more powerful alternative, the Sheeva Plug. Small, fanless, internal flash and an SDCard slot (from which I'm running the O/S). I leave these machines running 24/7 and I want them to be quiet and consume as little power as possible. I therefore use an SDCard to place the O/S on. Since SDCards fail much faster than spinning HDD's during normal operation I make sure the system is optimised to write as little to the disk as possible. Most logging is turned off, I make extensive use of RAM filesystems (ramfs) and for additional (non-O/S) data storage I use a 2.5" USB HDD (which spins down and powers off after so many minutes of inactivity). For logging some system statistics I use rrdtool and to prevent rrdtool from constantly writing to the SDCard flash I put the datbase file (.rrd) in a RAM filesystem. My main reason for writing this script is because I didn't want to lose my .rrd files every time the system shuts down. This script will sync from one directory to another (saving the .rrd from /dev/shm/rrd to /var/lib/rrd) when the system shuts down and copies it back (restoring the database back to /dev/shm/rrd) upon system boot up. The script also has an 'update' feature which updates to the backup directory (to /var/lib/rrd in this example) to make sure we don't lose too much information in case the server shuts down without going through the normal shutdown procedure (e.g. in case of a power outage). I run the 'update' feature only once a week, which is the trade off between losing database information and losing the SDCard due to extensive write cycles. Latest version: [[File:Dirsync-1.0.tar.gz]] http://www.globalscaletechnologies.com/p-22-sheevaplug-dev-kit-us.aspx http://en.wikipedia.org/wiki/SheevaPlug http://en.wikipedia.org/wiki/NSLU2 http://www.nslu2-linux.org/ af9d624fc3e3797889667db371235818e98867da Wifi-startstop 0 97 355 354 2011-09-29T00:34:15Z Admin 1 wikitext text/x-wiki This script uses the 'expect' program to interact with my router to automatically start and stop the Wi-Fi. To automatically initiate either a start or a stop I have the following crontab entries: <pre>#start wireless at 18:30 during weekdays 30 18 * * 1-5 /root/bin/start-wifi.sh > /dev/null 2>&1 #turn off wireless at 23:00 every day 0 23 * * * /root/bin/stop-wifi.sh > /dev/null 2>&1 </pre> ==Wi-Fi Start== The start-wifi.sh script contains the following lines: <pre>#!/bin/sh EXPECT=/usr/bin/expect EXP_SCRIPT=/root/bin/wifi-start.exp LOG=/dev/shm/expect.log if $EXPECT -f $EXP_SCRIPT then echo "`date` Wireless Network started by Expect script" >> $LOG else echo "`date` Wireless Network already active" >> $LOG fi </pre> The wifi-start expect script looks like this: <pre>set timeout 5 set PASS "secretpw" set ROUTER "http://192.168.0.1/xslt?PAGE=C04&amp;THISPAGE=C01&amp;NEXTPAGE=C04&amp;DEVNAME=wave0" set OPTIONS "-anonymous" spawn /usr/bin/links $ROUTER $OPTIONS expect { "2701HGV-W" { set CONTINUE 1 } timeout { exit 1 } } #search for the password field send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" sleep 1 # enter password send "$PASS" # jump down to the submit button send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" #press enter send "\r" # acknowledge to post form data #press enter send "\r" expect { "You are about to enable the following " { set CONTINUE 1 } timeout { exit 1 } } sleep 1 # jump down to the confirm button send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" # press 'enter' send "\r" # acknowledge to post form data #press enter send "\r" expect "Refresh" # press enter to refresh the page send "\r" expect "View Network Summary" exit 0 </pre> ==Wi-Fi Stop== The stop-wifi.sh script contains the following lines: <pre>#!/bin/sh EXPECT=/usr/bin/expect EXP_SCRIPT=/root/bin/wifi-stop.exp LOG=/dev/shm/expect.log if $EXPECT -f $EXP_SCRIPT then echo "`date` Wireless Network stopped by Expect script" >> $LOG else echo "`date` Wireless Network already disabled" >> $LOG fi </pre> The wifi-stop expect script looks like this: <pre>set timeout 5 set PASS "secretpw" set ROUTER "http://192.168.0.1/xslt?PAGE=C04&amp;THISPAGE=C01&amp;NEXTPAGE=C04&amp;DEVNAME=wave0" set OPTIONS "-anonymous" spawn /usr/bin/links $ROUTER $OPTIONS expect { "2701HGV-W" { set CONTINUE 1 } timeout { exit 1 } } #search for the password field send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" sleep 1 # enter password send "$PASS" # jump down to the submit button send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" #press enter send "\r" # acknowledge to post form data #press enter send "\r" expect { "You are about to disable the following " { set CONTINUE 1 } timeout { exit 1 } } sleep 1 # jump down to the confirm button send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" send -- "\033\[B" # press 'enter' send "\r" # acknowledge to post form data #press enter send "\r" expect "Refresh" # press enter to refresh the page send "\r" expect "View Network Summary" exit 0 </pre> f33388327f031fb5ef8d5725cb1bd90b1225690c File:Samba-dc.tar.gz 6 98 356 2011-09-29T01:35:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Dcadmin.tar.gz 6 99 359 2011-10-07T05:54:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-pcb-20111007.jpg 6 100 361 2011-10-07T11:30:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Dcadmin-2011-10-10.tar.gz 6 101 363 2011-10-11T21:33:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Samba-domain-controller 0 94 365 364 2011-10-11T21:37:41Z Admin 1 wikitext text/x-wiki With help from http://www.howtoforge.com/samba_setup_ubuntu_5.10_p5 I successfully set up a Samba based Windows Domain Controller. It supports roaming profiles, user and machine accounts, shared folders, home folders and printing. To ease management of user accounts I am writing a few scripts and a php back end. What works: * adding new user accounts * reset account passwords * lock user accounts * delete user accounts What doesn't work yet: Domain operations: * changing the domain name * changing the name of the main user account * changing the dcadmin web password Latest version: [[File:Dcadmin-2011-10-10.tar.gz]] e67e8c4c456c2336eb465526a87ed60cca051928 File:2009-09-23 0705 cimg0162.jpg 6 103 369 2011-10-14T09:54:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:2009-09-23 0706 cimg0163.jpg 6 105 371 2011-10-14T09:58:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:2009-09-23 0711 cimg0164.jpg 6 106 373 2011-10-14T10:00:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:2009-09-23 0740 cimg0165.jpg 6 107 374 2011-10-14T10:02:38Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:2009-09-23 0801 cimg0167.jpg 6 109 379 2011-10-14T10:12:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:2009-09-23 0813 cimg0168.jpg 6 110 380 2011-10-14T10:21:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:2009-09-23 0744 cimg0166.jpg 6 108 383 377 2011-10-14T10:27:11Z Admin 1 uploaded a new version of "[[File:2009-09-23 0744 cimg0166.jpg]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Dust-storms-23-sep-2009 0 104 385 384 2011-10-14T10:31:21Z Admin 1 wikitext text/x-wiki On 23 September 2009 I woke up and noticed something weird outside. Most of my blinds were closed but everything had a bit of an orange tint to it. When I opened up the blinds I couldn't believe what I saw. Everything was orange! [[File:2009-09-23 0705 cimg0162.jpg|none]] Right outside my window, looking at the neighbour's place. A huge sand storm had blown up sand from the Australian outback right across the east coast of New South Wales. The scenery was familiar but soo weird! I opened up the blinds at the back of the house and again, everything had an orange tint to it! [[File:2009-09-23 0706 cimg0163.jpg|none]] Looking at our backdoor neighbours. No-one would ever believe me if I don't show some real white fluoro light in these pictures. [[File:2009-09-23 0711 cimg0164.jpg|none]] From my kitchen window, just to show that white light still exists.. Not knowing what else to do, I prepared my lunch and had my breakfast as usual and went to drive to work. Everything was orange.. [[File:2009-09-23 0740 cimg0165.jpg|none]] Just leaving my driveway and off to work.. Everyone was driving with their headlights on and it was misty. [[File:2009-09-23 0744 cimg0166.jpg|none]] Driving out of town, waiting for the train crossing to clear.. On the highway everyone was driving slowly.. [[File:2009-09-23 0801 cimg0167.jpg|none]] Driving along the road I normally take felt very odd this day.. Arriving at work it was very strange to see everthing inside a bright white whilst looking outside the sky was still very orange. [[File:2009-09-23 0813 cimg0168.jpg|none]] View from outside my office that morning. After a few hours most of the dust just blew away and all the colours returned back to normal. By the time I drove home that day I couldn't tell what happened that morning. a6fb2aac3559745eebdb281625e79e4ef4f1d85d File:0051-pcb-20111018.jpg 6 111 386 2011-10-18T09:59:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-pcb-v1.0.JPG 6 83 389 288 2011-10-18T10:05:32Z Admin 1 uploaded a new version of "[[File:0051-pcb-v1.0.JPG]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-pcb-3d-20111019.jpg 6 113 392 2011-10-18T21:46:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-pcb-20111019.jpg 6 114 393 2011-10-18T21:46:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0053-schem.JPG 6 117 401 2011-10-23T03:08:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0053-pcb.JPG 6 118 403 2011-10-23T03:10:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-sch-1.0.pdf 6 119 415 2011-10-23T09:00:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-sch-1.0.JPG 6 120 417 2011-10-23T09:04:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0053-pcb-3d-v1.0.jpg 6 122 425 2011-10-31T06:24:23Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0053-pcb-v1.0.jpg 6 123 427 2011-10-31T06:25:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0053-sch-v1.0.jpg 6 124 428 2011-10-31T06:26:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0053-sch-v1.0.pdf 6 125 429 2011-10-31T06:27:38Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0053-avr-fuse-resetter.zip 6 116 436 399 2011-11-02T08:50:15Z Admin 1 uploaded a new version of "[[File:0053-avr-fuse-resetter.zip]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0059-pcb-3d-v1.0.JPG 6 126 437 2011-11-02T09:00:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0059-pcb-v1.0.JPG 6 127 438 2011-11-02T09:01:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0059-sch-v1.0.JPG 6 128 439 2011-11-02T09:02:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0059-sch-v1.0.pdf 6 129 440 2011-11-02T09:04:36Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0059-ATtiny84-eval-board 0 91 441 329 2011-11-02T09:04:54Z Admin 1 wikitext text/x-wiki {{Infobox | name = ATtiny84 eval board | image = [[Image:blank.jpg|150px]] | imagecaption = no image yet | author = Marcel Post | mcu = ATyiny84 | initial_release_date = Month Year | last_modified_date = Month Year | pcb_layers = 2 | project_status = in development | category = [[Electronics]] }} The idea is to have a small form factor evaluation board that has room for a few basic components: * ATtiny84 (14 pin) * power socket * small section of blank pads (perhaps 10x10) * some LED's * ICSP connector * small pushbutton <br> <br> ==Description== ==Timeline== ==Schematic== [[File:0059-sch-v1.0.JPG|thumb|none]] View schematic as pdf (Oct 2011) [[File:0059-sch-v1.0.pdf]] ==Circuit Board== [[File:0059-pcb-3d-v1.0.JPG|none]] This is a very first design, it will most certainly change over time but in the end I hope it is going to look something like this. [[File:0059-pcb-v1.0.JPG|none]] Just the bare bones pcb. ==Software== Latest source code: ==Release Notes== ==Gallery== ==External Links== http://www.atmel.com/avr/ f8ad6e78d8b3558815707c8a2a17749ff690948b Mcu 0050-ds1820-tempsensor 0 132 449 2011-11-13T04:38:55Z Admin 1 moved [[Mcu 0050-ds1820-tempsensor]] to [[Mcu 0050-handheld-tempsensor]] wikitext text/x-wiki #REDIRECT [[Mcu 0050-handheld-tempsensor]] b3f93b3038b12467e681da8577c9a2172d4b4a24 File:Tempsensor-pic16f84-01.jpg 6 136 462 2011-11-13T05:03:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Tempsensor-pic16f84-02.jpg 6 137 463 2011-11-13T05:04:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-pcb-3d-bottom-v1.0.JPG 6 138 467 2011-11-13T10:27:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-pcb-bottom-v1.0.JPG 6 139 468 2011-11-13T10:29:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-sch-bottom-v1.0.JPG 6 140 469 2011-11-13T10:30:28Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-sch-top-v1.0.pdf 6 135 470 459 2011-11-13T10:32:05Z Admin 1 uploaded a new version of "[[File:0050-sch-top-v1.0.pdf]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-pcb-3d-top-v1.0.JPG 6 141 472 2011-11-13T11:11:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-pcb-3d-top copper-v1.0.JPG 6 142 473 2011-11-13T11:12:59Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-pcb-top-v1.0.JPG 6 143 475 2011-11-13T11:14:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0062-final-3d.jpg 6 145 482 2011-11-18T12:10:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0062-pcb-3d-v1.0.JPG 6 146 484 2011-11-18T12:12:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0062-pcb-3d-v1.0 back.JPG 6 147 485 2011-11-18T12:21:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0062-pcb-v1.0.JPG 6 148 487 2011-11-18T12:24:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0062-sch-v1.0.JPG 6 149 488 2011-11-18T12:26:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0062-sch-v1.0.pdf 6 150 489 2011-11-18T12:28:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:10168-05.jpg 6 152 514 2011-11-19T05:00:32Z Admin 1 Sparkfun Nokia 3310 LCD breakout board wikitext text/x-wiki Sparkfun Nokia 3310 LCD breakout board 4f2cc31388a501cf930240963a1805b81ede839a File:0050-pcb-3d-v1.0.JPG 6 153 516 2011-11-20T05:49:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-pcb-v1.0.JPG 6 154 518 2011-11-20T05:50:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-sch-v1.0.JPG 6 155 520 2011-11-20T05:52:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Tempsensor-t84.jpg 6 157 525 2011-11-20T09:14:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-sch-v1.0.JPG 6 160 529 2011-11-22T22:11:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-sch-v1.0.pdf 6 161 530 2011-11-22T22:12:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-gerbers.zip 6 162 535 2011-11-23T01:07:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-gerbers-v1.0.zip 6 163 541 537 2011-11-23T21:57:16Z Admin 1 uploaded a new version of "[[File:0055-gerbers-v1.0.zip]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-pcb-3d-v1.0.JPG 6 158 545 543 2011-11-23T22:21:10Z Admin 1 uploaded a new version of "[[File:0055-pcb-3d-v1.0.JPG]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-pcb-v1.0.JPG 6 159 546 544 2011-11-23T22:21:32Z Admin 1 uploaded a new version of "[[File:0055-pcb-v1.0.JPG]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-pcb-3d-v1.0.jpg 6 133 551 547 2011-11-26T07:51:35Z Admin 1 uploaded a new version of "[[File:0050-pcb-3d-v1.0.jpg]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-pcb-v1.0.jpg 6 164 552 548 2011-11-26T07:52:22Z Admin 1 uploaded a new version of "[[File:0050-pcb-v1.0.jpg]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-sch-v1.0.jpg 6 134 553 454 2011-11-26T07:53:11Z Admin 1 uploaded a new version of "[[File:0050-sch-v1.0.jpg]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-sch-v1.0.pdf 6 156 554 521 2011-11-26T07:54:06Z Admin 1 uploaded a new version of "[[File:0050-sch-v1.0.pdf]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0050-gerbers-v1.0.zip 6 165 555 2011-11-26T07:54:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0062-gerbers-v1.0.zip 6 151 558 503 2011-11-26T08:52:27Z Admin 1 uploaded a new version of "[[File:0062-gerbers-v1.0.zip]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-gerbers.zip 6 166 559 2011-11-27T03:29:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-pcb-3d-v1.0.jpg 6 167 561 2011-11-27T03:42:38Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-pcb-v1.0.jpg 6 168 562 2011-11-27T03:43:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-sch-v1.0.pdf 6 84 564 285 2011-11-27T03:48:30Z Admin 1 uploaded a new version of "[[File:0051-sch-v1.0.pdf]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-sch-v1.0.jpg 6 169 565 2011-11-27T03:48:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0050-handheld-tempsensor 0 40 573 572 2011-11-27T10:33:00Z Admin 1 wikitext text/x-wiki {{Infobox | name = 0050-ds1820-tempsensor | image = [[File:Tempsensor-t84.jpg|150px]] | imagecaption = prototype | author = Marcel Post | mcu = ATtiny85 | initial_release_date = Month Year | last_modified_date = Month Year | pcb_layers = 2 | project_status = in development | category = [[Electronics]] }} DS18S20 based Handheld Temperature sensor, for use with [[Mcu 0062-LCD-48x84-RC-Enclosure-top-pcb]]. <br> <br> ==Description== Years ago I started a similar project, creating a hand-held temperature sensor using a PIC16F84 with four 7-segment displays. The original project still works very well but I would like some more features added, such as: * better display (using the Nokia 48x84 monochrome LCD instead of four 7-segment displays) * support for multiple DS1820 sensors using the one-wire protocol * better accuracy (PIC-based device has half-degree accuracy, this device will have 2 decimals accuracy) * optimising the code to get the most out of battery life (current PIC-based device does 2.7mA @ 3.09V, early tests show I can get down to 1.95mA, that's about 25% better) * store values (data logging) using EEPROM over i2c and graphical display of past values and trends * setting thresholds and signaling over and under-temperature events (for use as a thermostat) * wireless transmission of (stored) values One of my preferences for this project is to design custom PCB's that fits inside the Jaycar HB5610 Remote Control Enclosure. The code for this project also formed the basis for [[mcu_0055-rs232-tempsensor]]. [[File:Tempsensor-pic16f84-01.jpg]] [[File:Tempsensor-pic16f84-02.jpg]] The original project, based on the PIC16F84 using four 7-segment displays and running off two 1.5V AA batteries. ==Timeline== * 2011-11-27 Ordered 1x PCB with BatchPCB. Only after the boards have arrived, built up and tested I will post relevant firmware on this page. Until then! * 2011-11-18 Decided to make the top-half a stand-alone project for use with other projects if required. See [[Mcu 0062-LCD-48x84-RC-Enclosure-top-pcb]]. * 2011-11-13 Practically finalised the design for the top-half pcb with the LCD and buttons * 2011-11-03 Did up a design in diptrace for the RC Enclosure internals. * 2011-10-01 Got the DS1820 one-wire code working on ATtiny85 ==Schematic== This project is designed to fit in the enclosure's bottom half (with battery compartment). [[File:0050-sch-v1.0.JPG|thumb|none]] View schematic as pdf (Nov 2011) [[File:0050-sch-v1.0.pdf]] ==Circuit Board== Bottom pcb with the mcu, eeprom, isp header and the on-board temperature sensor. Please note that these are not yet finished designs but I expect to be 90% there. One of the things I haven't tested yet is the clearance between the top and bottom pcb's once fitted inside the enclosure and see if it clashes with certain components. [[File:0050-pcb-3d-v1.0.jpg|220px|none]] The pcb for the bottom-half of the enclosure. [[File:0050-pcb-v1.0.jpg|220px|none]] see-through model of the bottom pcb. Gerbers: [[File:0050-gerbers-v1.0.zip]] ==Software== Latest source code: [[Image:Mcu 0050 tempsensor 20110601.tar.gz]] ==Release Notes== ==Gallery== ==External Links== http://www.jaycar.com.au/productView.asp?ID=HB5610&form=CAT2&SUBCATID=986#1 http://www.atmel.com/avr/ c993ef2e9d0fa676c85897c682db74672b461d25 Mcu 0062-LCD-48x84-RC-Enclosure-top-pcb 0 144 577 576 2011-11-27T10:35:50Z Admin 1 wikitext text/x-wiki {{Infobox | name = LCD pcb | image = [[Image:0062-final-3d.jpg|150px]] | imagecaption = 48x84 LCD Board | author = Marcel Post | mcu = (none) | initial_release_date = 11-2011 | last_modified_date = 11-2011 | pcb_layers = 2 | project_status = design complete | category = [[Electronics]] }} Multi-purpose top PCB for a Remote Control enclosure that has circuitry, holes, pushbuttons and connectors for a Nokia 3310/5510 48x84 pixels LCD. <br> <br> ==Description== This is a generic board with for LCD functionality to be mounted inside a plastic project box sold as a 'Remote Control' enclosure. The enclosure has mounting holes top and bottom and this pcb is to be mounted on the top half of the enclosure. Due to the basic functionality of this design it is an ideal addition to other projects requiring some kind of graphical interface. The LCD to be mounted on top of this PCB is the Nokia 3310/5510 breakout board that Sparkfun sells for about $10. There is room to mount three pushbuttons on the board and there are pads available to insert pull-down-to-ground resistors. The idea is to have the mcu pushbutton pins configured as inputs and pulled down to ground with the resistors on this board. When a button is pushed VCC sends the voltage to the input pin and a press is detected. ==Timeline== * 2011-11-27 Ordered 2x PCB's with BatchPCB. Only after the boards have arrived, built up and tested I will post relevant firmware on this page. Until then! * November 2011 Finished designing the pcb and updating this webpage with relevant artwork. * November 2011 Finished writing the code to get the Nokia board working with an Atmel ATtiny84 mcu. ==Schematic== The schematic is pretty simple. Visible are the pushbuttons with their individual pull-down resistors. They share VCC with the LCD. [[File:0062-sch-v1.0.JPG|thumb|none]] View schematic as pdf (Nov 2011) [[File:0062-sch-v1.0.pdf]] ==Circuit Board== This is the final preview of the pcb before manufacturing. I have placed the jumpers on the side so that an underlying project board can easily connect to the LCD board using ribbon cable. [[File:0062-pcb-v1.0.JPG|220px|none]] Top view of the display board in a semi-transparent way (groundplane visible) Here is a 3d view of the board with the Nokia LCD fitted on top. [[File:0062-pcb-3d-v1.0.JPG|220px]] [[File:0062-pcb-3d-v1.0 back.JPG|220px]] Top and bottom view of the display board. ==Software== Latest source code: (not appliccable) Gerber files: [[File:0062-gerbers-v1.0.zip]] ==Release Notes== Other boards I'm currently designing: [[Pending_PCB_manufacturing]] ==Gallery== [[File:10168-05.jpg|none]] The original Sparkfun breakout board for the Nokia 3310 monochrome LCD. ==External Links== http://www.sparkfun.com/products/10168 http://www.arduino.cc/playground/Code/PCD8544 http://www.atmel.com/avr/ bd5eb78660b809221d37b020720c144d24c351e0 File:SkypeSetup.zip 6 171 605 2011-12-11T09:27:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 RealEstate 0 172 618 617 2011-12-14T22:44:41Z Admin 1 wikitext text/x-wiki Real Estate links: * http://www.mortgagechoice.com.au/calculators/home-loan-repayments-calculator.aspx Loan Repayment Calculator 752072536528c7cb6bd77209ede7b3a859929fab Pcb run 01 0 170 629 628 2012-01-03T10:41:26Z Admin 1 wikitext text/x-wiki PCB run 01 Started: 27 November 2011 <timeline> ImageSize = width:700 height:575 DateFormat = dd/mm/yyyy Period = from:26/11/2011 till:05/01/2012 PlotArea = width:550 height:525 left:50 bottom:25 TimeAxis = orientation:vertical ScaleMajor = unit:day increment:1 start:26/11/2011 ScaleMinor = unit:day increment:1 start:26/11/2011 PlotData= at:03/01/2012 fontsize:S text:"PCB's received in the mail (3 Jan 2012)" at:01/01/2012 fontsize:S text:"-- 1 Jan 2012 --" at:21/12/2011 fontsize:S text:"panel 1812 sent for production, 1790 sent to customers (21 Dec 2011)" at:19/12/2011 fontsize:S text:"panel 1804 sent for production (19 Dec 2011)" at:16/12/2011 fontsize:S text:"panel 1801 sent for production (16 Dec 2011)" at:15/12/2011 fontsize:S text:"panel 1800 sent for production, 1788, 1771(!) sent to customers (15 Dec 2011)" at:14/12/2011 fontsize:S text:"panel 1799 sent for production (14 Dec 2011)" at:13/12/2011 fontsize:S text:"panel 1796 sent for production (13 Dec 2011)" at:12/12/2011 fontsize:S text:"panel 1792, 1795 sent for production, panel 1772, 1775(!) sent to customers (12 Dec 2011)" at:09/12/2011 fontsize:S text:"panel 1791 sent for production, panel 1769 sent to customers (9 Dec 2011)" at:08/12/2011 fontsize:S text:"panel 1790 sent for production, panel 1767 sent to customers (8 Dec 2011)" at:07/12/2011 fontsize:S text:"panel 1788 sent for production, panel 1762 sent to customers (7 Dec 2011)" at:05/12/2011 fontsize:S text:"panel 1777, 1783 sent for production (5 Dec 2011)" at:01/12/2011 fontsize:S text:"-- 1 Dec 2011 --" at:30/11/2011 fontsize:S text:"panel 1756 shipped to customers (30 Nov 2011)" at:29/11/2011 fontsize:S text:"my designs panelized on board 1771 and sent out for production (29 Nov 2011)" at:27/11/2011 fontsize:S text:"designs submitted to BatchPCB (27 Nov 2011)" </timeline> * 15 Dec 2011 - (t+18) Received confirmation that my board has been shipped to me. * 12 Dec 2011 - (t+15) Even though my board number is less than the latest shipped board I still see my order status as 'Processing'. This could either mean that board 1772 has just shipped out before mine or that the status in my order overview hasn't been updated yet. * 29 Nov 2011 - (t+2) Designs panelised and sent for production. * 27 Nov 2011 - (t+0) Submitted my designs online with BatchPCB. 29b34059a266c5f2fbd924d4c1a13b41290fd6a3 File:0051-firmware v1.0.zip 6 173 632 2012-01-19T21:03:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 ATtiny85 shiftout 0 176 657 656 2012-02-07T03:32:15Z Admin 1 wikitext text/x-wiki In an attempt to port some code originally written for Arduino I came across a function that doesn't seem to be supported on AVR-GCC. I hope I just haven't found the library yet but in any case, here's some code to produce the same function. <pre> #define HIGH 1 #define LOW 0 void shiftOut(byte dataPin, byte clockPin, byte bitOrder, byte value) { int i; for (i = 0; i < 8; i++) { if (bitOrder == LSBFIRST) { digitalWrite(dataPin, !!(value & (1 << i))); } else { digitalWrite(dataPin, !!(value & (1 << (7 - i)))); } digitalWrite(clockPin, HIGH); digitalWrite(clockPin, LOW); } } </pre> See also: http://arduino.cc/en/Reference/ShiftOut [[C and C++]] 4e2347ddf8848b20b4ed921586c0c675574e7149 Data Types 0 178 673 672 2012-02-08T09:18:17Z Admin 1 wikitext text/x-wiki Integer types having exactly the specified width {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Short</b> |style="background-color:#f2f2f2;"|<b>Size</b> |style="background-color:#f2f2f2;"|<b>Range</b> |- |typedef signed char |int8_t |1 byte | -128 to 127 |- |typedef unsigned char (aka byte) |uint8_t |1 byte |0 to 255 |- |typedef signed short | |2 bytes | -32768 to 32767 |- |typedef unsigned short | |2 bytes |0 to 65535 |- |typedef signed int |int16_t |2 bytes | -2147483648 to 2147483647 |- |typedef unsigned int |uint16_t |2 bytes |0 to 4294967295 |- |typedef signed long int |int32_t |4 bytes | -2147483648 to 2147483647 |- |typedef unsigned long int |uint32_t |4 bytes |0 to 4294967295 |- |typedef signed long long int |int64_t |8 bytes | |- |typedef unsigned long long int |uint64_t |8 bytes | |- |typedef float | |4 bytes | +/- 3.4e +/- 38 (~7 digits) |- |typedef double | |8 bytes | +/- 1.7e +/- 308 (~15 digits) |} short int (short) Short Integer. 2bytes signed: -32768 to 32767 unsigned: 0 to 65535 int Integer. 4bytes signed: -2147483648 to 2147483647 unsigned: 0 to 4294967295 long int (long) Long integer. 4bytes signed: -2147483648 to 2147483647 unsigned: 0 to 4294967295 bool Boolean value. It can take one of two values: true or false. 1byte true or false float Floating point number. 4bytes +/- 3.4e +/- 38 (~7 digits) double Double precision floating point number. 8bytes +/- 1.7e +/- 308 (~15 digits) long double Long double precision floating point number. 8bytes +/- 1.7e +/- 308 (~15 digits) wchar_t Wide character. 2 or 4 bytes 1 wide character See also: * http://www.nongnu.org/avr-libc/user-manual/group__avr__stdint.html * http://www.cplusplus.com/doc/tutorial/variables/ 1c55de54bcf117d3679d115a78c7ddd35079fa46 File:Easycomm.txt 6 179 674 2012-04-25T04:19:36Z Admin 1 Easycomm1 and easycomm2 protocol definition for az/el (Azimuth Elevation, or pan tilt) two-axis rotors. wikitext text/x-wiki Easycomm1 and easycomm2 protocol definition for az/el (Azimuth Elevation, or pan tilt) two-axis rotors. 3e4da9da5b14cdcbdf84f33d4dda3d0c38727289 File:Predict-0.1beta1.zip 6 182 679 2012-04-29T22:11:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:P1.jpg 6 183 683 2012-04-29T22:52:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:P2.jpg 6 184 684 2012-04-29T22:53:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:P3.jpg 6 185 686 2012-04-29T22:54:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:P4.jpg 6 186 687 2012-04-29T22:54:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:P5.jpg 6 187 688 2012-04-29T22:57:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:P6.jpg 6 188 689 2012-04-29T22:58:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:P7.jpg 6 189 690 2012-04-29T22:58:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Predict-0.1beta2.zip 6 191 701 698 2012-05-02T02:43:05Z Admin 1 uploaded a new version of "[[File:Predict-0.1beta2.zip]]" wikitext text/x-wiki with dedicated sun & moon page c79d4dd18e4803bc498bdd0abb6bb97fcea8ecf0 File:Predict-launch-icon.png 6 194 708 2012-05-04T12:35:53Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:P8.jpg 6 196 715 2012-05-05T07:59:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Qrpredict 300x300.png 6 197 725 2012-05-05T11:09:57Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Predict-0.1beta3.apk 6 195 741 740 2012-05-11T01:38:12Z Admin 1 uploaded a new version of "[[File:Predict-0.1beta3.apk]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Attiny84 large.pdf 6 198 780 2012-05-20T05:25:19Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Predict-0.1-beta4.apk 6 199 788 2012-05-21T21:58:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Predict-0.1beta4.apk 6 200 801 2012-05-22T11:22:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Predict 0 181 802 792 2012-05-22T11:23:12Z Admin 1 wikitext text/x-wiki PREDICT is an open-source, multi-user satellite tracking and orbital prediction program written under the Linux operating system by John A. Magliacane, KD2BD. PREDICT is free software. Users may redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License or any later version. Link to the original Predict software: http://www.qsl.net/kd2bd/predict.html This page is a collection of screenshots and a beta software release of my attempt to port the software to the Android smart-phone platform. Below is a list of features that have been known to work: * Orbital predictions for sun, moon and satellites * Online updating of TLE (Two Line Element) data sets * Observer location definitions * Manually editing of TLE data * Realtime tracking of sun, moon and satellites * I2C output, using Sparkfun IOIO board, see http://www.sparkfun.com/products/10748 ==Some screen shots== [[File:P1.jpg|none]] Main menu [[File:P2.jpg|none]] The realtime satellite tracking screen [[File:P3.jpg|none]] The Orbital Predictions screen. The 'map' button displays a top-view of the satellite trajectory over your location (see below). [[File:P8.jpg|none]] A graphical representation of the satellite pass over as seen from above. [[File:P4.jpg|none]] Page with the available TLE sources. Here you can manage which TLE sources the program should use when updating from the web. [[File:P5.jpg|none]] Here is where you define the TLE sources. They're basically links to text files where to find the TLE data. [[File:P6.jpg|none]] The actual TLE data can be manually added or edited. [[File:P7.jpg|none]] You can add location definitions to the program to easily switch between observer locations. ==Installing the program== -either- * Navigate to this web page using your android phone * Find the latest version of the apk file and click on it. * On the File:Predict.apk page click on the Predict.apk link (with the filesize, and MIME type application/zip) -or- * Scan the QR-code for the direct download link. * Once the code has been recognised, select 'Open Browser' (download should begin automatically and the file will be stored in your Downloads directory) * Open your Android file browser and navigate to the Downloads directory. * Find the file Predict.apk (the .apk extension may not be visible) and click it to install * Press the 'Install' button [[File:Predict-launch-icon.png]] The predict icon once it's installed on your Android device. Once the program has been installed: * run Predict on your Android device. * Update TLE data (Settings - TLE Sources - Update Active TLE's) * Add your location (Settings - Locations - Add Location) * Set the time zone (Settings - Time and Date) ==Latest version of the Predict for Android APK file== * Predict for Android: [[File:Predict-0.1beta4.apk]] * Direct download link to the latest Predict.apk software: [[File:Qrpredict 300x300.png|none]] Scan the above code to start the download. ==Features not implemented (yet)== * multi-satellite tracking (it's going to be a real challenge to fit all the info on one screen!!) * predicting of visible satellite passes * night-colours scheme (switch to reddish colours for night-time usage of the program) * digitised voice announcements (partially working) * tcp/ip network master * On-screen compass heading for quick satellite finding * much, much more.. ==Version History== * Beta 4 (release date: 21 May 2012) - Added NTP support to sync with Internet time - Added 'First-Time Setup' page explaining the various functions - Added 'Delete all Satellites' and 'Set all Active' in Satellites page - Predict now communicates with the Sparkfun IOIO board and outputs realtime satellite coordinates as I2C - Satellite and Location list menus are now alphabetically sorted - Added build time to 'About' page - Added alarm when satellite is above horizon in Realtime mode - moved 'Set Active' checkbox in TLE page to the top of the page * Beta 3 (release date: 5 May 2010) - Program now uses conventional lat/lon locations (East of Greenwich is +, West is -). - Location changes applied without having to restart program. - Added QR-code for easy sharing. - Realtime tracking now updates every 200ms. - Added a 'First-Time Setup' page. - Predict now only supports 'portrait' orientation * Beta 2 (release date: 2 May 2012) - Added dedicated page for sun and moon realtime data. * Beta 1 (release date: 29 April 2012) - First beta release, many functions still not complete. - Realtime single satellite works, AOS and LOS not always updated. fc98587fafd8e26e9f84db32d92b894b91ab6768 File:Angles.zip 6 202 811 2012-05-24T03:12:02Z Admin 1 Angle trigonometry app in Java for Nokia phones wikitext text/x-wiki Angle trigonometry app in Java for Nokia phones 2f6c973318edaa406934ba2f01c452c2cfeed624 File:Angles 1.jpg 6 203 814 813 2012-05-24T03:34:01Z Admin 1 uploaded a new version of "[[File:Angles 1.jpg]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Angles 2.jpg 6 204 815 2012-05-24T03:34:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Nokia 0 205 818 2012-05-24T03:37:58Z Admin 1 Created page with "Not much here, the only Java app I ever wrote for my Nokia phone as 'Angles', a simple trigonometry app that is used to calculate the distance to a point by measuring the angles …" wikitext text/x-wiki Not much here, the only Java app I ever wrote for my Nokia phone as 'Angles', a simple trigonometry app that is used to calculate the distance to a point by measuring the angles to it. Here's the app page: [[Angles]] e482933661a154abc435e872b8e9152eec65b1ae File:PIC16F84A.PNG 6 207 820 2012-05-24T03:43:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Assembler 0 206 822 821 2012-05-24T03:44:39Z Admin 1 wikitext text/x-wiki [[File:PIC16F84A.PNG|none]] In the world of microcontrollers I first got started with the Pic 16F84A. I developed several applications for it and all of them were programmed in assembler. PIC microcontroller applications: * [[Gettemp]] * [[RTTY]] df607cb231c72742635be806b366dde3e7fda5fb Microcontrollers 0 208 824 823 2012-05-24T03:48:39Z Admin 1 wikitext text/x-wiki ==AVR (ATtiny84 & ATtiny85)== See: [[Electronics]] ==PIC (mostly PIC16F84A)== See: [[Electronics]] ==PC (x86)== 2420476b23e47442404afa79f177d15d6e36185c PC 0 209 825 2012-05-24T03:50:07Z Admin 1 Created page with " See: [[Linux_Bash]]" wikitext text/x-wiki See: [[Linux_Bash]] 1da46888231cb07c1257978e5fa7d495a8700826 File:Predict.apk 6 193 826 800 2012-06-10T00:44:15Z Admin 1 uploaded a new version of "[[File:Predict.apk]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Passwd.apk 6 210 833 832 2012-06-15T22:51:14Z Admin 1 uploaded a new version of "[[File:Passwd.apk]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Talk:Java 1 212 848 2012-06-25T22:41:09Z Admin 1 Created page with "Please use the blog for feedback: http://au-blogg.blogspot.com/" wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ 085e24d7fae4510b75ede3ecc0c2709fd960be47 Talk:Programs 1 213 849 2012-06-25T22:41:36Z Admin 1 Created page with "Please use the blog for feedback: http://au-blogg.blogspot.com/" wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ 085e24d7fae4510b75ede3ecc0c2709fd960be47 Talk:Android 1 214 850 2012-06-25T22:42:12Z Admin 1 Created page with "Please use the blog for feedback: http://au-blogg.blogspot.com/" wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ 085e24d7fae4510b75ede3ecc0c2709fd960be47 Talk:Predict 1 215 851 2012-06-25T22:42:41Z Admin 1 Created page with "Please use the blog for feedback: http://au-blogg.blogspot.com/" wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ 085e24d7fae4510b75ede3ecc0c2709fd960be47 Talk:Electronics 1 216 852 2012-06-25T22:43:04Z Admin 1 Created page with "Please use the blog for feedback: http://au-blogg.blogspot.com/" wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ 085e24d7fae4510b75ede3ecc0c2709fd960be47 Talk:SafeNote 1 218 858 2012-06-26T12:12:08Z Admin 1 Created page with "Please use the blog for feedback: http://au-blogg.blogspot.com/" wikitext text/x-wiki Please use the blog for feedback: http://au-blogg.blogspot.com/ 085e24d7fae4510b75ede3ecc0c2709fd960be47 File:SafeListqr.png 6 222 880 2012-07-12T09:03:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Safelist-ss1.PNG 6 223 887 2012-07-25T23:00:23Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Safelist-ss2.PNG 6 224 888 2012-07-25T23:01:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Safelist-ss3.PNG 6 225 889 2012-07-25T23:02:38Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Safelist-icon.png 6 227 901 2012-07-27T10:30:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Safelist icon.png 6 228 906 904 2012-07-27T11:01:56Z Admin 1 uploaded a new version of "[[File:Safelist icon.png]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Safelist feature graphic small.jpg 6 230 912 2012-07-28T11:19:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0J1326.200.jpg 6 232 928 2012-08-04T07:38:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0J1324.200.jpg 6 233 929 2012-08-04T07:39:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Icsp-avr.PNG 6 235 934 2012-08-04T07:53:19Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0J1422.600.jpg 6 234 937 931 2012-08-04T09:27:39Z Admin 1 uploaded a new version of "[[File:0J1422.600.jpg]]":&#32;pololu board with pinout wikitext text/x-wiki pololu programmer d212d8c67775710d6445b56154496adc3e7e24c7 File:Icsp-0051.JPG 6 236 940 2012-08-04T09:34:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Pololu programmer 0 231 944 943 2012-08-04T09:45:32Z Admin 1 wikitext text/x-wiki The Pololu programmer is a USB-based programmer for AVR MCUs. [[File:0J1326.200.jpg]] [[File:0J1324.200.jpg]] The device can be ordered from [http://www.pololu.com Pololu] or [http://www.robotgear.com.au RobotGear] and probably from many other places too. Here's a direct link to the Pololu website for the [http://www.pololu.com/catalog/product/1300 Pololu USB AVR Programmer]. ==Pinout== [[File:0J1422.600.jpg]] ==In-Circuit Serial Programming== In some of my circuit boards designs I include a set of header pins so I can easily program the MCU using the Pololu programmer and the 6-lead ribbon cable that's provided with it. Here's an example for an ATtiny85 project: [[File:0051-pcb-3d-v1.0.jpg]] The complete board (an I2C-based LCD board). [[File:Icsp-avr.PNG]] Detail: just the ICSP pins on the PCB design. [[File:Icsp-0051.JPG]] What it looks like once the board is made. One very important note: * Make sure the mcu is powered by a voltage on its corresponding VCC pin. The pin on the header connector of the programmer that says 'VDD' is only there to detect that the chip has power connected to it. So it's a signal that goes back to the programmer rather than a VCC source going from the programmer to power the MCU. Fortunately the Pololu programmer has a row of pins, one of which (VBUS +5V) is a nice 5VDC power source straight from the PC's USB port. I added an extra lead from that pin as a separate lead along the ribbon cable to the end header connector. At the end of that single lead I soldered a header pin that I can easily plug into a breadboard on the MCU's VCC pin. dd5b9f6607b1ba0ba8653966d61f5af5e403e654 Itemsoldout 0 238 951 2012-08-15T00:20:12Z Admin 1 Created page with "Sorry, but the item you requested is sold out. Please check back later if the quantity of stock has been increased. We apologise for any inconvenience caused." wikitext text/x-wiki Sorry, but the item you requested is sold out. Please check back later if the quantity of stock has been increased. We apologise for any inconvenience caused. e691d80746a2e2e5f9bf9248f2691930ece79904 ATtiny85 PWM2 0 241 966 2012-08-16T01:43:16Z Admin 1 moved [[ATtiny85 PWM2]] to [[ATtiny85 PWM]] over redirect wikitext text/x-wiki #REDIRECT [[ATtiny85 PWM]] dea410eed747b709eba5bd92ad5a66f1461ad8d5 ATtiny84 enable pullup resistors 0 242 967 2012-08-16T01:52:01Z Admin 1 Created page with " * If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated. <pre> pinMode(PB0,INPUT); // set PB0 as input digita…" wikitext text/x-wiki * If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated. <pre> pinMode(PB0,INPUT); // set PB0 as input digitalWrite(PB0,HIGH); // enable the internal pull-up resistor </pre> * If PORTxn is written logic one when the pin is configured as an output pin, the port pin is driven high (one). fc9c440973af6428ab6dcff94a7ced73341bc4bd Single Board Computers 0 243 984 983 2012-08-30T04:07:17Z Admin 1 wikitext text/x-wiki Specs of some of the small-ish SBC's (Single Board Computers) I've used. {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Model</b> |style="background-color:#f2f2f2;"|<b>CPU</b> |style="background-color:#f2f2f2;"|<b>Speed</b> |style="background-color:#f2f2f2;"|<b>BogoMips</b> |style="background-color:#f2f2f2;"|<b>nbench MEM</b> |style="background-color:#f2f2f2;"|<b>nbench INT</b> |style="background-color:#f2f2f2;"|<b>nbench FP</b> |style="background-color:#f2f2f2;"|<b>Power Usage</b> |- |LinkSys NSLU2 |ARM Intel XScale-IXP42x Family rev 1 (v5l) |133MHz |132.71 |0.284 |0.351 |0.004 |3.5 - 3.9 Watts |- |Marvell SheevaPlug |ARM Marvell Kirkwood Feroceon 88FR131 rev 1 (v5l) |1.2GHz |1192.75 |3.408 |4.988 |0.351 |2.3 - 7.0 Watts |- |Raspberry Pi |ARM1176JZF-S (armv6k) |700MHz |697 |2.140 |2.924 |0.230 |3.5 Watts |} Baseline (LINUX) : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38 [http://www.tux.org/~mayer/linux/bmark.html nbench] is an old school benchmark program made by BYTE. It is used to test the CPU's memory access, integer and floating point speed. It is useful to benchmark the Sheeva Plug with nbench because the nbench webiste has a large collections of results from computers long ago (Intel 486DX/33!). 2bbd07dc08be0de025d4f509595d211965c0a616 MediaWiki:Sidebar 8 245 1002 1001 2012-09-06T03:08:26Z Admin 1 wikitext text/x-wiki * navigation ** mainpage|mainpage-description ** portal-url|portal ** currentevents-url|currentevents ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help * SEARCH * TOOLBOX * LANGUAGES e7f21f0cae3181e6175a69bd44c633184afba8b5 Java 0 190 1004 881 2012-09-14T22:37:15Z Admin 1 wikitext text/x-wiki Some java programs I've been occupied with: * [[SafeList]] safely store sensitive information on Android * [[Angles]] angle calculator, simple trigonometry, on Nokia * [[Predict]] satellite predictions and real-time tracking on Android * [[MagicMemo]] A simple and effective memo/notepad app 8afe08c0049639aaf37853f9063434dcba1c2a58 Android 0 180 1008 878 2012-09-14T22:40:24Z Admin 1 wikitext text/x-wiki Some programs I made for Android smart phones * [[SafeList]] * [[Predict]] * [[QRZ]] * [[MagicMemo]] 792490349b612ea90e000574e3c3e6a2cf4e1ab6 File:SafeList.apk 6 221 1046 1045 2012-10-07T09:46:15Z Admin 1 uploaded a new version of "[[File:SafeList.apk]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Recipes 0 130 1048 446 2012-10-13T10:27:56Z Admin 1 wikitext text/x-wiki ==Recipes== [[porridge]] [[muesli]] [[truffels]] 22bace2890f79f29753ad00fa05662b9fe83d237 File:Home-made-truffles.jpg 6 249 1050 2012-10-13T10:36:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Truffels 0 248 1055 1054 2012-10-13T10:39:42Z Admin 1 wikitext text/x-wiki oatmeal chocolate truffels [[File:Home-made-truffles.jpg|200px]] Ingredients: * oats * cacao * butter * brown sugar * pinch of salt Preparation: * ground oats until almost powder * set stove to low(est) heat * slowly melt the butter * add cacao and sugar and stir until absorbed * add ground oats until thick mass (add oats until 'rollable' consistency has been reached') * wash hands and roll mixture into 2-3cm dia balls Optional: * sprinkle with a thin layer of cacao 8202270733a24d591d5c5e3e7a2b20e9fa4fe649 Porridge 0 131 1057 1047 2012-10-13T23:32:57Z Admin 1 wikitext text/x-wiki porridge - 2 big servings Ingredients: * 1 cup oats * 1 cup raisins & nuts (almonds, peanuts, walnuts, etc..) * 2 cups milk * 1 cup water * 1 tablespoon sesame seeds * 2 tablespoons of dessicated dried coconut flesh * 2-3 tablespoons LSA (Linseed, Sunflower seeds and Almonds mix) Preparation: * heat up, stir until until boiling * fill two bowls with porridge Optionally, add: * honey * cinnamon 699245eba6955f1fe716810d83780a9c4e1a67f6 Muesli 0 250 1058 2012-10-16T09:36:41Z Admin 1 Created page with "Muesli (bircher kinda) * Yoghurt * oats * Nuts, seeds and dried fruit * LSA * cinnamon * Milk * coconut" wikitext text/x-wiki Muesli (bircher kinda) * Yoghurt * oats * Nuts, seeds and dried fruit * LSA * cinnamon * Milk * coconut 49bdb9d2bacb75fa9158a962d5a2483bcb2c89b8 File:LM78L05.pdf 6 252 1073 2012-11-21T04:09:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LM2940.pdf 6 253 1075 2012-11-21T04:10:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LM7805.pdf 6 254 1077 2012-11-21T04:12:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Attiny85-summary.pdf 6 255 1079 2012-11-21T21:35:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu-notes-01 0 251 1084 1083 2012-11-24T23:30:30Z Admin 1 wikitext text/x-wiki Presentation Notes for the Microcontroller Introduction at Westlakes Amateur Radio Club Data sheets * [[Datasheets]] Link to various datasheets Hardware setup: * connection diagram * batch/script files * avrdude Avrdude program script * Windows <pre> @echo off set PROJECT=blinkled set SPEED=16000000UL set PORT=\\.\USBSER000 set GCC_DEVICE=attiny85 set PGM_DEVICE=t85 set PGM_PROTO=avrispv2 set GCC_OPTIMISATION=-Os set AVRTOOLS=C:\winavr-20100110\bin echo compile program avr-gcc -g %GCC_OPTIMISATION% -Wall -mcall-prologues -DF_CPU=%SPEED% -mmcu=%GCC_DEVICE% -c -o %PROJECT%.o %PROJECT%.c echo create object file avr-gcc -g %GCC_OPTIMISATION% -Wall -mcall-prologues -DF_CPU=%SPEED% -mmcu=%GCC_DEVICE% %PROJECT%.o -o %PROJECT%.obj echo convert object file to hex file avr-objcopy -R .eeprom -O ihex %PROJECT%.obj %PROJECT%.hex echo write program to chip avrdude -F -c %PGM_PROTO% -P %PORT% -p %PGM_DEVICE% -U flash:w:%PROJECT%.hex echo avr-list output: echo ---------------- %AVRTOOLS%\avr-size -C --mcu=%GCC_DEVICE% %PROJECT%.obj > %PROJECT%_avr-size.txt type %PROJECT%_avr-size.txt pause </pre> * Linux Demo Programs for the ATtiny85: * Blink led <pre> /* Demo program: blinkled.c This program continously loops, bringing PB4 high and low with one-second intervals. ATtiny85 +--- ---+ (RST) PB5 -|1 |_| 8|- VCC PB3 -|2 7|- PB2 (SCK) +---|<|------ PB4 -|3 6|- PB1 (MISO) | led +-- GND -|4 5|- PB0 (MOSI) | | +-------+ +--/\/\/--+ 1k Pololu programming cable pinout (top view) +---+ ---------------- gnd |o o| rst ribbon cable mosi |o o| sck -----red-------- vdd |o o| miso +---+ NOTE: The T85 must be externally powered with 5V (4.5V does NOT work!) A t85 driving a standard 2x16 LCD without backlit LED on draws about 8.5mA so with 100mA to spare on a USB port you could consider grabbing 5V from the Pololu programmer. The 5V pin on the programmer is labeled: 'VBUS (+5V)' */ #include <avr/io.h> #include <util/delay.h> #define LED PB4 // Define ext led pin on PB4 #define OUTPUT 0 #define INPUT 1 #define LOW 0 #define HIGH 1 void pinMode(int pin,int state) { if (state == OUTPUT) { (DDRB |= (1 << pin)); } else { (DDRB &= ~(1 << pin)); } } void digitalWrite(int pin, int state) { // make sure port is set to output DDRB |= (1 << pin); if (state == HIGH) { (PORTB |= (1 << pin)); } else { (PORTB &= ~(1 << pin)); } } int main( void ) { pinMode(LED,OUTPUT); // Set output direction on LED while ( 1 ) { digitalWrite (LED,HIGH); _delay_ms(1000); digitalWrite (LED,LOW); _delay_ms(1000); } return 0; } </pre> * Read push button state * Analog to Digital * PWM (pulse width modulation) Web links: (AVR) * http://www.atmel.com/products/microcontrollers/avr/default.aspx Atmel 8 and 32-bit microcontrollers * http://www.pololu.com/catalog/product/1300 Pololu, a basic USB-based AVR ISP Programmer * http://winavr.sourceforge.net/ WinAVR, AVR-GCC for Windows * http://www.nongnu.org/avrdude/ AVRdude, ROM downloader/updater * http://www.engbedded.com/fusecalc AVR Fuse Byte calculator * http://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/ ATtiny fuse byte resetter * http://www.arduino.cc/ Arduino, prototyping platform * http://www.avrfreaks.net/ AVRfreaks, forum for Atmel microcontrollers (Other) * http://www.raspberrypi.org/ Raspberry Pi, ARM-based Single Board Computer (SBC) * http://www.sparkfun.com/ Sparkfun, USA-based electronics store * http://littlebirdelectronics.com/ Littlebird Electronics, reseller (and more) for Sparkfun products * http://www.robotgear.com.au RobotGear, reseller (and more) for Sparkfun products and Pololu programmer * http://www.diptrace.com/ Diptrace, printed circuit board (PCB) design software * http://oshpark.com/ OSH Park (previously dorkbotpdx), inexpensive manufacturer for low-volume PCB prototyping * http://www.gabotronics.com/development-boards/xmega-xprotolab.htm XprotoLab, a tiny oscilloscope and wave form generator (AWG) 684cce247c025a334659dd8ba26bb80a17baa989 Dos2unix 0 257 1120 1119 2013-01-20T01:39:17Z Admin 1 wikitext text/x-wiki A simple but effective script that strips out the /r (Carriage Return) character from DOS-based text files so that you don't see ^M at the end of every line when viewing under linux. <pre> #!/bin/sh echo "dos2unix" for file in "$@" do tr -d "\r" <$file>$file.unix done </pre> 6a7c507647a444482b66c1b98ffc36d076850382 Unix2dos 0 258 1122 1121 2013-01-20T01:59:20Z Admin 1 wikitext text/x-wiki A simple but effective script that inserts the /r (Carriage Return) character for DOS-based text files so that you don't have long, continous lines when viewing under windows. <pre> #!/bin/sh echo "unix2dos" for file in "$@" do awk 'sub("$", "\r")' $file > $file.dos done </pre> 16ce3d7984979afb9433c8248b926cd5311751d7 DigitalRead 0 262 1128 2013-01-24T09:35:43Z Admin 1 Created page with "<pre> int digitalRead(int pin) { if (bit_is_set(PINB,pin)) { return 1; } else { return 0; } } </pre>" wikitext text/x-wiki <pre> int digitalRead(int pin) { if (bit_is_set(PINB,pin)) { return 1; } else { return 0; } } </pre> ba9e27b5ba547cad24720ed7f0a185a0444aef04 DigitalWrite 0 263 1129 2013-01-24T09:36:11Z Admin 1 Created page with "<pre> void digitalWrite(int pin, int state) { if (state == HIGH) { (PORTB |= (1 << pin)); } else { (PORTB &= ~(1 << pin)); } } </pre>" wikitext text/x-wiki <pre> void digitalWrite(int pin, int state) { if (state == HIGH) { (PORTB |= (1 << pin)); } else { (PORTB &= ~(1 << pin)); } } </pre> 7e61c3def89b3228c1a04a1712dd80ffa0355d29 AVR Functions and Libraries 0 259 1130 1125 2013-01-24T09:36:43Z Admin 1 wikitext text/x-wiki [[I2C]] [[LCD]] [[data types]] [[Internal EEPROM]] [[digitalRead]] [[digitalWrite]] [[pinMode]] [[shiftout]] 87c97801afb57e704b4d9bf8b60e7dfefe02c1cd PinMode 0 264 1131 2013-01-24T09:37:12Z Admin 1 Created page with "<pre> void pinMode(int pin,int state) { if (state == OUTPUT) { (DDRB |= (1 << pin)); // set pin to output } else { (DDRB &= ~(1 << pin)); // set pin to input }…" wikitext text/x-wiki <pre> void pinMode(int pin,int state) { if (state == OUTPUT) { (DDRB |= (1 << pin)); // set pin to output } else { (DDRB &= ~(1 << pin)); // set pin to input } } </pre> 204f4cf2dcbed568182aebac3f5756dcd1025ebb LCD 0 261 1133 1127 2013-01-26T04:15:06Z Admin 1 wikitext text/x-wiki This page shows the code for directly accessing an attached LCD device (here the 2x16 character lcd device from Jaycar). <pre> void Write_LCD_Nibble(unsigned short N, int RS) { digitalWrite(STR,0); // ****** Write RS ********* digitalWrite(CLK,0); digitalWrite(Dout,RS); // Data_Pin digitalWrite(CLK,1); digitalWrite(CLK,0); // Shift in 4 bits int t = 0; int Flag = 0; int Mask = 8; for (t=0; t<4; t++) { Flag = N & Mask; if(Flag==0) { digitalWrite(Dout,0); // Data_Pin } else { digitalWrite(Dout,1); // Data_Pin } digitalWrite(CLK,1); digitalWrite(CLK,0); Mask = Mask >> 1; } // One more clock because SC and ST clks are tied digitalWrite(CLK,1); digitalWrite(CLK,0); digitalWrite(Dout,0); // Data_Pin digitalWrite(STR,1); // Enable_Pin (to LCD) digitalWrite(STR,0); // Enable_Pin (to LCD) } void Write_LCD_Data(unsigned short D) { int RS = 1; // It is Data, not command int Low_Nibble = D & 15; int High_Nibble = D/16; Write_LCD_Nibble(High_Nibble,RS); Write_LCD_Nibble(Low_Nibble,RS); } void Write_LCD_Cmd(unsigned short C) { int RS = 0; // It is command, not data int Low_Nibble = C & 15; int High_Nibble = C/16; Write_LCD_Nibble(High_Nibble,RS); Write_LCD_Nibble(Low_Nibble,RS); } void initialise_LCD() { pinMode(CLK,0); pinMode(STR,0); pinMode(Dout,0); _delay_ms(100); Write_LCD_Cmd(0x03); // function set _delay_ms(50); Write_LCD_Cmd(0x03); _delay_ms(50); Write_LCD_Cmd(0x03); _delay_ms(50); Write_LCD_Cmd(0x02); _delay_ms(50); Write_LCD_Cmd(0x2C); // Display ON, No cursors _delay_ms(50); Write_LCD_Cmd(0x06); // Entry mode- Auto-increment, No Display shifting _delay_ms(50); Write_LCD_Cmd(0x0E); _delay_ms(50); Write_LCD_Cmd(0x01); _delay_ms(50); Write_LCD_Cmd(0x80); _delay_ms(50); } void Position_LCD(unsigned short x, unsigned short y) { int temp = 127 + y; if (x == 2) { temp = temp + 64; } Write_LCD_Cmd(temp); } void Clear_LCD() { Write_LCD_Cmd(0x01); // Clear LCD _delay_ms(5); } void Write_LCD_Text(char *StrData) { int p = 0; int q = strlen(StrData); int temp = 0; for (p = 0; p < q; p++) { temp = StrData[p]; Write_LCD_Data(temp); } } void Write_LCD_Number(char number) { // writes a number's digits on the display int digits; if (number == 0) { digits = 0; int array[0]; array[0]=0; Write_LCD_Data(array[0]+48); } else { // determine the number of digits int digits = (int)(log(number)/log(10))+1; // split up the number to an array int i = digits - 1; int array[digits]; while (number > 0) { array[i--] = number % 10; number /= 10; } // display array on LCD for(i = 0; i <= digits-1; i++) { Write_LCD_Data(array[i]+48); } } } </pre> 361c3757faba87124f0c744b861af60be5d07ce4 MagicMemo 0 246 1135 1022 2013-01-26T07:34:59Z Admin 1 wikitext text/x-wiki MagicMemo Status: published App Website: https://play.google.com/store/apps/details?id=map.magicmemo testing: [[File:MagicMemo.apk]] f77160b65ba79fcc0674b9da3da84d5366c7a010 File:MagicMemo.apk 6 247 1137 1136 2013-01-26T09:15:09Z Admin 1 uploaded a new version of "[[File:MagicMemo.apk]]" wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 StopDiskWrites 0 256 1141 1140 2013-01-30T21:51:46Z Admin 1 wikitext text/x-wiki The linux operating system by default writes quite a bit of information to log files during a normal system boot and after it's booted even when the machine is just sitting there idling away the O/S will still add entries to log files. Specifically for systems that run off a filesystem with limited write-cycles, such as flash memory (SDCard, USB drive, etc..) it is important to minimise, if not stop all together, the writing of information to the filesystem that lives on the flash memory. * Solution #1 -- write elsewhere The 'directory' /dev/shm is a 'ramdisk' and ideal for storing information that is okay to delete in between reboots. The size of /dev/shm is roughly half that of the available RAM memory, but in such a way that if traditional applications need more memory it simply is taken away from /dev/shm. This process is dynamically, meaning that when memory is available again, /dev/shm will grow back to its original size if possible. Services that are ideal to move to /dev/shm are everything in /var/run and /tmp. Depending on what applications you're running there's other candidates too such as apache and samba. More on that later. * Solution #2 -- stop logging An obvious candidate here is cron as it writes to /var/log/syslog every time it runs a cron job. The logging process can be controlled with /etc/rsyslog.conf and we'll tackle the specifics below. Below is a list of processes that normally write to disk and how to stop that from writing to flash. ==Logon/Logoff== writes to: /var/log/wtmp, /var/log/lastlog ==Swap file== a swap file is not required and may drastically reduce flash memory when in use. ==Cron Jobs== writes to: /var/log/syslog solution: configure /etc/rsyslog to stop logging cron info Open /etc/rsyslog.conf, and change: <pre> *.*;auth,authpriv.none -/var/log/syslog </pre> To: <pre> *.*;auth,authpriv,cron.none -/var/log/syslog </pre> and also add: <pre> :msg, contains, "pam_unix(cron:session): session closed for user root" ~ :msg, contains, "pam_unix(cron:session): session opened for user root" ~ </pre> Restart the syslog daemon to affect the changes: <pre> # /etc/init.d/rsyslog restart [ ok ] Stopping enhanced syslogd: rsyslogd. [ ok ] Starting enhanced syslogd: rsyslogd. </pre> ==man-db (cron)== The man-db program updates/cleans? the man pages in /var/cache/man. By default it does this on a daily basis and although nothing is written to these directories, there is a slight bug in the man-db package that always writes/touches? the directories. Bug reports Bug#619726 and Bug#620947 at http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg890841.html (/etc/cron.daily/man-db every day touches localization subdirectories in /var/cache/man/) shows more details. Since keeping the manpages in good order probably isn't that important we offer a simple solution to the above disk writes, namely to insert a little 'exit 0' at the top of the man-db script in /etc/cron.daily/man-db. <pre> #!/bin/sh # # man-db cron daily exit 0 # added to prevent man-db from writing to the filesystem every day. set -e iosched_idle= </pre> ==MARK entries== writes to: /var/log/messages solution: configure /etc/default/syslogd to stop logging the MARK entries Check if this is still happening on your system as although I noticed it on earlier versions of Debian, the latest 'Wheezy' does not leave MARK statements every 20 minutes anymore. In any case, if you do have these MARK statements in /var/log/messages coming up you can disable them by editing /etc/default/syslogd and change <pre> SYSLOGD="" </pre> to <pre> SYSLOGD="-m 0" </pre> Restart the syslog daemon to affect the changes: <pre> # /etc/init.d/rsyslog restart [ ok ] Stopping enhanced syslogd: rsyslogd. [ ok ] Starting enhanced syslogd: rsyslogd. </pre> ==Most applications write to /var/run and /tmp== writes to: /tmp, /var/run and /var/tmp solution: move all to tmpfs Create the following entries in /etc/fstab <pre> tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/log tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0 </pre> Rebooting the sytem is the preferred method to affect these changes. ==ntp== Ntp daemon writes offset values to /var/lib/ntp/ntp.drift and generic logging to /var/log/daemon.log For the drift file we make a symlink to the whole /var/lib/ntp directory and point it to /dev/shm, so that ntp.drift is stored as /dev/shm/ntp.drift <pre> mv /var/lib/ntp/ntp.drift /dev/shm rm -rf /var/lib/ntp ln -s /dev/shm /var/lib/ntp </pre> Ntp will also log entries to /var/log/daemon.log. We edit the file /etc/default/ntp and add an option to log to a different file. You guessed it, to /dev/shm! open /etc/default/ntp and update the line to: <pre> NTPD_OPTS='-g -l /dev/shm/ntpd.log' </pre> We intercept any remaining logging of messages by updating /etc/rsyslog.conf and adding the following lines: <pre> :msg, contains, "logging to file /dev/shm/ntpd.log" ~ :msg, contains, "ntpd 4.2.6p5@1.2349-o" ~ </pre> Restart the syslog daemon to affect the changes: <pre> # /etc/init.d/rsyslog restart [ ok ] Stopping enhanced syslogd: rsyslogd. [ ok ] Starting enhanced syslogd: rsyslogd. </pre> ==hardware clock== Not sure if this is related to ntp, but let's write move this file to /dev/shm too <pre> mv /etc/fake-hwclock.data /dev/shm && ln -s /dev/shm/fake-hwclock.data /etc/fake-hwclock.data </pre> ==Apache== Apache logs to /var/log/apache2/. comment out the default logging to access.log by editing /etc/apache2/sites-available/default I've noticed that /var/log/apache2 can be missing it's best to add the following lines to the /etc/init.d/apache2 startup script so that the files are always moved to /dev/shm without affecting the operation of apache after reboots. Open /etc/init.d/apache2 and at the end of the script find where the 'CASE' statements begin. Just above that, create two new procedures: <pre> setup_symlinks() { # --- begin: custom code to minimise disk writes --- # Force creation of /var/log/apache2 in /dev/shm # check if symlink already exists if ! test -L /var/log/apache2 then # symlink is not there yet # check if directory exists if test -d /var/log/apache2 then # /var/log/apache2 is a normal directory # action: move to /dev/shm and create new symlinks rm -rf /dev/shm/apache2 mv /var/log/apache2 /dev/shm ln -s /dev/shm/apache2 /var/log/apache2 else # /var/log/apache2 has not been created yet # just create empty framework mkdir /dev/shm/apache2 ln -s /dev/shm/apache2 /var/log/apache2 fi fi # --- end: custom code to minimise disk writes --- } delete_symlinks() { rm -rf /dev/shm/apache2 rm -rf /var/log/apache2 } </pre> Then add 'setup_symlinks' to the start, reload and restart cases, and the delete_symlinks to the stop case. Example: <pre> case $1 in start) log_daemon_msg "Starting web server" "apache2" </pre> To: <pre> case $1 in start) setup_symlinks log_daemon_msg "Starting web server" "apache2" </pre> ==Samba== Even though samba wasn't doing anything I still noticed that /etc/samba/dhcp was created. Since the file was a 0-Byte placeholder file I simply created a symlink with a slight name change to /dev/shm for it. <pre> mv /etc/samba/dhcp.conf /dev/shm/samba-dhcp.conf && ln -s /dev/shm/samba-dhcp.conf /etc/samba/dhcp.conf </pre> ==dhcp client== The dchp client writes the search path and domain name as well as a list of DNS servers in /etc/resolv.conf. We move this file to /dev/shm too. edit /etc/init.d/networking and add the following procedure: <pre> setup_symlinks() { # --- begin: custom code to minimise disk writes --- # Force creation of /etc/resolv.conf in /dev/shm # check if symlink already exists if ! test -L /etc/resolv.conf then # symlink is not there yet # check if file exists if test -f /etc/resolv.conf then # /etc/resolv.conf is a normal file # action: move to /dev/shm and create new symlinks rm -rf /dev/shm/resolv.conf mv /etc/resolv.conf /dev/shm ln -s /dev/shm/resolv.conf /etc else # /etc/resolv.conf has not been created yet # just create an empty file touch /dev/shm/resolv.conf ln -s /dev/shm/resolv.conf /etc fi fi # --- end: custom code to minimise disk writes --- } </pre> Then link to it from the start, reload and restart case statements. The DHCP client also keeps track of it's dchp lease details in a file under /var/lib/dhcp. One for each interface (e.g. eth0, eth1, wlan0, wlan1, etc..). In most cases you will be using only one or two ethernet interfaces to connect the network. Simply create a symlink to /dev/shm for every interface and all is good. The file /var/lib/dhcp/dhclient.leases (size 0) can be left as is. <pre> mv /var/lib/dhcp/dhclient.wlan0.leases /dev/shm && ln -s /dev/shm/dhclient.wlan0.leases /var/lib/dhcp mv /var/lib/dhcp/dhclient.eth0.leases /dev/shm && ln -s /dev/shm/dhclient.eth0.leases /var/lib/dhcp </pre> Lastly, DHCP will also log its activities in /var/log/syslog. Simply add a filter in /etc/rsyslog.conf to intercept these messages before they get logged. Open /etc/rsyslog.conf and add the following lines: <pre> :msg, contains, "dhclient:" ~ :msg, contains, "ifplugd(wlan0)[" ~ :msg, contains, "wpa_supplicant" ~ </pre> ==Alsa== The sound system Alsa also creates a file in /var/lib. Again, we create a symlink to /dev/shm for it. <pre> mv /var/lib/alsa/asound.state /dev/shm && ln -s /dev/shm/asound.state /var/lib/alsa </pre> ==WPA rekeying== Part of the specification of WPA/2 is to periodically change the encryption keys, this is known as rekeying and it logs to /var/log/daemon.log every time it changes keys. We can intercept these messages before they get logged by adding a filter in /etc/rsyslog.conf. Open /etc/rsyslog.conf and add the following line: <pre> :msg, contains, "WPA: Group rekeying completed" ~ </pre> ==Other resources== http://www.cyrius.com/debian/nslu2/linux-on-flash.html 989751db182297a830386d9c3ebec673f1cc5387 File:Openvpn-win-gui.PNG 6 268 1197 2013-02-19T02:25:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Openvpn logo.png 6 269 1206 2013-02-19T02:42:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 OpenVPN 0 244 1210 1209 2013-02-19T02:47:25Z Admin 1 wikitext text/x-wiki This page describes how to set up a basic [http://openvpn.net/ OpenVPN] point-to-point installation on Debian Linux. For a setup with a server and username/certificate controlled clients, view the [[Openvpn-setup]] page. From the OpenVPN website: "OpenVPN is a full-featured SSL VPN which implements OSI layer 2 or 3 secure network extension using the industry standard SSL/TLS protocol, supports flexible client authentication methods based on certificates, smart cards, and/or username/password credentials, and allows user or group-specific access control policies using firewall rules applied to the VPN virtual interface. OpenVPN is not a web application proxy and does not operate through a web browser." http://openvpn.net/index.php/open-source/documentation/howto.html [[File:Openvpn logo.png]] ==Installing the OpenVPN software== This step needs to be done on both server and client(s). Make sure to have 'contrib' listed in /etc/apt/sources.list <pre> # apt-get update # apt-get install openvpn </pre> on the vpn server machine: * create a new static key <pre> # cd /etc/openvpn # openvpn --genkey --secret static.key </pre> This will create a new file called 'static.key'. Copy this file securely to the client in the /etc/openvpn directory. * create the server configuration file Create /etc/openvpn/vpn.conf and add the following lines: <pre> dev tun0 port 655 proto udp ifconfig 10.9.8.1 10.9.8.2 secret /etc/openvpn/static.key </pre> Where 10.9.8.x is your VPN subnetwork once it is connected, 10.9.8.1 will be IP of the server and 10.9.8.2 is IP of client. There is no need to enter public ip addresses or internet domain names etc.. Only the client will need the server's (router's) public ip address. On the vpn client machine: * make sure the /etc/openvpn/static.key is read-only (chmod 400). This is not a requirement but simply best practice. * create the client configuration file Create /etc/openvpn/vpn.conf and add the following lines: <pre> remote server.public.ip.address dev tun0 port 655 proto udp ifconfig 10.9.8.2 10.9.8.1 secret /etc/openvpn/static.key </pre> To test, start OpenVPN by hand on both sides with the following command: <pre> # openvpn --config /etc/openvpn/vpn.conf --verb 6 </pre> The openvpn startup script (in /etc/init.d) will automatically look for .conf files in /etc/openvpn and start them at boot. To change this behaviour, simply create a new directory under /etc/openvpn/ and move the .conf file in there (e.g. /etc/openpvn/myvpn/vpn.conf). ac32377f1e0df62a24558ed8039f275dabb52909 Dovecot-imapd 0 270 1212 2013-03-13T02:42:11Z Admin 1 Created page with "Dovecot is an open source IMAP and POP3 email server for Linux/UNIX-like systems, written with security primarily in mind. Dovecot is an excellent choice for both small and large…" wikitext text/x-wiki Dovecot is an open source IMAP and POP3 email server for Linux/UNIX-like systems, written with security primarily in mind. Dovecot is an excellent choice for both small and large installations. It's fast, simple to set up, requires no special administration and it uses very little memory. Howtos: * [[dovecot basic]] dovecot, exim and fetchmail. A basic setup where dovecot hosts the mail, exim is the MTA, and fetchmail is used to grab external mail using POP3. 10d210745c1eae5bdac4f8b730a2fec46e99ea10 File:0051-firmware v0.03.zip 6 272 1219 2013-04-01T05:02:27Z Admin 1 now handles faster comms due to built in clock stretching wikitext text/x-wiki now handles faster comms due to built in clock stretching 250a3b1a2f53a548c79e42ca572c2e5a0979e7b4 2013 VK Contest Dates 0 273 1224 1223 2013-04-30T01:34:48Z Admin 1 wikitext text/x-wiki 2013 VK Contest Dates (Phone) <pre> Date Name Start End Bands ------------------------------------------------------------------------ 16-17 Mar John Moyle 0100 - 0059 (24hrs) All bands 4 May Harry Angel 1000 - 1146 (106mins) 3535 - 3665 kHz 11 May VK Trans Tasman 0800 - 1400 (6hrs) 80m 20 Jul VK Trans Tasman 0800 - 1400 (6hrs) 160m 17-18 Aug Rememberance Day 0300 - 0259 (24hrs) All bands 17-18 Aug Intl Lighthouse 0100 - 2359 (48hrs) All bands 5-6 Oct Oceania DX 0800 - 0800 (24hrs) 160/80/40/20/15/10m </pre> 3433d6b8a3edb02b97e6d66ad1c006afe3ec31ad Howto's 0 274 1226 2013-06-05T04:01:43Z Admin 1 moved [[Howto's]] to [[Docs and Howto's]] wikitext text/x-wiki #REDIRECT [[Docs and Howto's]] 60fa4d03fd963932de5b55684e711e5f10a05bfc Cryptography 0 275 1231 1230 2013-06-05T04:06:50Z Admin 1 wikitext text/x-wiki Diffy Hellman key exchange explained with colours: * http://www.youtube.com/watch?v=3QnD2c4Xovk‎ Youtube link or (hosted here) Choosing a strong password: * http://xkcd.com/936/ 89a608c599e23672042727a8472a0721eb9a06b0 Alsa 0 277 1249 1247 2013-11-06T08:39:51Z Admin 1 wikitext text/x-wiki how-to-determine-your-audio-cards-or-usb-mics-maximum-sampling-rate <code> arecord -f dat -r 60000 -D hw:0,0 -d 5 test.wav </code> ---> 48,000Hz check volume: <code> sox recordedfile.wav -n stat </code> near-realtime audio levels: <code> arecord -Dhw:0 -c2 -d 0 -fdat /dev/null -vvv </code> find out the alsa device id's: <code> root@raspberrypi:/home/map# cat /proc/asound/cards 0 [Device ]: USB-Audio - USB Sound Device USB Sound Device at usb-bcm2708_usb-1.3, full speed 1 [ALSA ]: BRCM bcm2835 ALSbcm2835 ALSA - bcm2835 ALSA bcm2835 ALSA </code> Therefore, the hardware device id for the BRCM device is: $hw:1 To specify a recording device, first find out which device id is set for the input device: <code> root@raspberrypi:/home/map# arecord -l **** List of CAPTURE Hardware Devices **** card 0: Device [USB Sound Device], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 root@raspberrypi:/home/map# </code> Therefore, the alsa hardware device id for the capture device on the USB Sound Device (there is only one) is: $hw:0,0 ==CLI setting of audio parameters== The command line can be used to set many values of the sound device. Most options are to set volume, capture device, balance, etc.. For example, lets say we want to Unmute and then Set the Master Volume. First, find out what your sound card device is capable of: <code> amixer -L </code> Troubleshooting: arecord: set_params:1145: Unable to install hw params: Seems to be a fault with the usb stack or something silly, a reboot fixed this problem for me. a5218286fc791a09efa0291e718907dab9572a38 File:Temps-week.png 6 280 1259 2013-12-03T04:43:12Z Admin 1 example screenshot of DS1820 temperature logging around the house wikitext text/x-wiki example screenshot of DS1820 temperature logging around the house ebfdadeeabf9e93e50fe0da9f2891018a3fcb0aa Dd-mount-tar 0 281 1265 1264 2013-12-23T01:00:15Z Admin 1 wikitext text/x-wiki * Extract from a .tar.gzipped dd file straight to another device When creating a dd image of a whole disk it can be worthwhile compressing it using .tar.gz The resulting file can still be extracted and dd'ed to a new disk all in one go: # tar xz0f disk-image_dd.tar.gz | dd of=/dev/sda bs=1M * To watch the progress of an ongoing dd command, send it the -USR1 kill signal: - find the pid of the dd command - send the kill command: # kill -USR1 <pid> This will not kill the running dd process, it's just a method of communicating signals to the dd program. * mount a partition inside a whole-disk dd image - install parted if you haven't done so already - run parted on the dd file - switch to bytes 'unit B' - print the partition table 'print' - take note of the Start value of the partition you wish to mount (drop the 'B' at the end of the number!) - quit parted 'quit' - mount the partition using the offset argument # mount whole-disk.dd -o loop,offset=<startposition> /mnt/partition * mount a partition inside a tar.gzipped whole-disk dd image - use the above technique to obtain the offset for the partition you wish to mount - install kpartx if you haven't done so already (http://unix.stackexchange.com/questions/31669/is-it-possible-to-mount-a-gzip-compressed-dd-image-on-the-fly) 9ddba294c4bf51c281801751301e9a5c9bab85b6 USB-currents 0 283 1270 2013-12-25T00:00:47Z Admin 1 Created page with " The USB2.0 specification allows for devices to be powered through the USB port. The voltage is 5.0 Volts and the maximum current draw is 500mA per USB port. The default ma..." wikitext text/x-wiki The USB2.0 specification allows for devices to be powered through the USB port. The voltage is 5.0 Volts and the maximum current draw is 500mA per USB port. The default maximum current draw is 250mA and this can be increased to 500mA by the client negotiating with the host. 0c680e002d9938442395f97e5f2b5c1d51dc14c5 USB-device-currents 0 284 1284 1283 2013-12-25T02:01:37Z Admin 1 wikitext text/x-wiki Various USB devices and their current draw {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Device</b> |style="background-color:#f2f2f2;"|<b>Idle</b> |style="background-color:#f2f2f2;"|<b>Max</b> |style="background-color:#f2f2f2;"|<b>Comments</b> |- |Basic USB keyboard |5mA |45mA |Leds (caps, num, scroll) add most current! |- |Optical mouse |17.3mA |32mA |Logitech M-BZ96C |- |[[Argent Data OpenTrackerUSB]] |23mA |23mA | |- |[[Edimax EW-7811Un WiFi]] |34mA |85mA |idle at 34mA with short bursts of 71mA |- |2.5" Sata HDD in USB enclosure |180mA |600mA | |- |Raspberry Pi (model A) |160mA |191mA |Without Ethernet controller and 1 USB port |- |Raspberry Pi (model B) |404mA |367mA |With Ethernet controller and 2 USB ports |} 50cc92722c123b6688a88b5cbee19140f3d2275b File:LittleWire driver win x86.zip 6 289 1287 2013-12-27T07:24:18Z Admin 1 x86 driver for windows wikitext text/x-wiki x86 driver for windows 3a7e8744600534d0587248c953960126cb65fc66 File:LittleWire driver win 64bit.zip 6 290 1289 2013-12-27T07:25:49Z Admin 1 64bit driver for windows wikitext text/x-wiki 64bit driver for windows 745c216950a47d4d21cb6ab180d67f18e9d49a4a File:Combined.zip 6 291 1291 2013-12-27T07:30:38Z Admin 1 Combined version, (bootloader+main) combined firmware wikitext text/x-wiki Combined version, (bootloader+main) combined firmware 6b41237fa80b5cdce805fe70c6ac65f128802008 File:Littlewire v13.zip 6 292 1295 2013-12-27T09:54:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LittleWire driver.zip 6 293 1297 2013-12-27T10:02:02Z Admin 1 Drivers that work with the v1.3 firmware of the Littlewire AVR programmer wikitext text/x-wiki Drivers that work with the v1.3 firmware of the Littlewire AVR programmer 9074bbe0c0a09da10a1330de3ed1ba5e62ccf5f3 File:0051-lcd-i2c-v0.04.zip 6 294 1300 2014-01-02T08:09:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0051-lcd-i2c-board.JPG 6 295 1302 2014-01-02T08:16:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0051-lcd-i2c-board 0 48 1307 1306 2014-01-02T08:21:01Z Admin 1 wikitext text/x-wiki {{Infobox | name = 0051-lcd-i2c-board | image = [[File:0051-lcd-i2c-board.JPG|150px]] | imagecaption = 0051-top-with-lcd | author = Marcel Post | mcu = AVR ATtiny85 | initial_release_date = August 2011 | last_modified_date = January 2013 | pcb_layers = 2 | project_status = finished | category = [[Electronics]] }} The '''LCD Board with I2C comms''' is a basic display board that accepts incoming data over I2C. It can be hooked up to a low-speed I2C network and its ID# can be set using a pushbutton. <br> <br> ==Description== After obtaining enough information on how to drive a 2 x 16 LCD unit with only three wires (by using a serial shift register) this board was my first attempt to produce something workable. ==Timeline== * 2012-01-20 added major release of software version 1.0. This code is working fine. * 2012-01-03 PCB's arrived and I've built up two boards. * 2011-11-27 Ordered 2x PCB's with BatchPCB. Only after the boards have arrived, built up and tested I will post relevant firmware on this page. Until then! * 2011 November - Finished schematic and designs * 2011 September - Started designing a custom circuit board using the Diptrace software * 2011 June - Prototype working with successful communication using an Arduino Duemilanove as the I2C master. ==Schematic== [[File:0051-sch-v1.0.jpg|thumb|none]] View schematic as pdf (Oct 2011) [[File:0051-sch-1.0.pdf]] ==Circuit Board== [[File:0051-pcb-3d-v1.0.jpg|none]] Nov 2011 - Finished design, now it's waiting for pcb manufacturing. [[File:0051-pcb-v1.0.jpg|none]] Latest design (November 2011) Gerbers: [[File:0051-gerbers.zip]] Other boards I'm currently designing: [[Pending_PCB_manufacturing]] ==Software== Diptrace files (schematic and PCB): [[File:0051-I2C-LCD-board-v1.0.zip]] Firmware: v0.04 [[File:0051-lcd-i2c-v0.04.zip]] Released: 2 January 2014 v0.03 [[File:0051-firmware v0.03.zip]] Released: 1 April 2013 NOTE: Be aware that I2C does not need a specific operating frquency. The code for this chip should be running on 8MHz in order with other I2C devices, but it may run on lower frequencies as well. I haven't tested this yet. So be sure to set the lower fuse byte to 0xE2 to disable CLKDIV8 and to make the chip run on 8MHz. Check the PROG.BAT or prog file for the proper settings. ==Release Notes== * The pushbutton sets the internal I2C id. To use this, hold down the push button and then apply a voltage source to power up the board. With the button pressed the display will show black characters on the top row of the display. After 5 seconds, release the button and the board will go into setup mode. The display should show the current I2C id. The I2C protocol will be able to address a maximum of 127 devices on the bus. Pressing the button will cycle through these values. Press and hold the button for about 5 seconds to store the new ID into eeprom. * When assembling the board I would recommend not to install the push button until you have confirmed that the display is showing activity. I had a case where I assembled the board and all I could see was a dark top half of the screen and nothing seemed to work. It turned out that I didn't install the push button properly. It made a connection between the top two pins even when the button was not pressed. This basically means that the board will try to go into setup mode but never gets further because the button is not released properly. * The serial shift register chip I use is the M74HC595B1 from ST. * When assembly has been completed and the ATtiny84 has been flashed with the proper firmware the board is ready to use. When powered on it will show a brief message 'I2C LCD Module' and on the second row 'Listening..'. The screen is cleared and it will sit there until there's something to display. * (bug?) There may be a bug with this firmware that can cause the display not to work properly. I need to test this further but my concern is this: brand new microcontrollers have their EEPROM empty. This could mean '0x00' or '0xFF' or maybe even something else. The v1.0 firmware currently does not detect an out of range value and may cause the read-eeprom-value to fail. Whether this affects further operation of the board is unknown as I don't have any brand new chips to test with. If this is a bug it can be remedied fairly easily by following these steps: 1. change the source code and add a line that will write a value (e.g. decimal 61) to eeprom 2. compile the code and write to the chip using the ISP header (or use an external programmer) 3. power up the board and enter the setup mode to confirm that the ID has been set 4. change the source code to remove the line that was added in step 1 5. compile the code and write to the chip * The software was developed using an Arduino as I2C master running at 16MHz. The ATtiny can keep up with this speed due to clock stretching. Howerver, to speed up communications it would be worthwile to set the clock speed of the ATtiny as high as possible. The ATiny85 can run at 1, 8 or 16MHz. Use the following fuse bytes to set the clock: {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Speed</b> |style="background-color:#f2f2f2;"|<b>Low Fuse Byte</b> |style="background-color:#f2f2f2;"|<b>High Fuse Byte</b> |- |1MHz |0x62 |0xDF |- |8MHz |0xE2 |0xDF |- |16MHz |0xC1 |0xDF |- |} Command line example using avrdude: <pre> avrdude -c %PGM_PROTO% -P %PORT% -p %PGM_DEVICE% -U flash:w:%PROJECT%.hex -U lfuse:w:0xE2:m </pre> * The display board will assume end of transmission after a timeout. This can be set in the code and is currently set to 5 seconds. * As per the I2C protocol the device supports giving an acknowledge by holding down SDA line. * The board does not provide I2C bus pull-up resistors. You will have to add these to your project. (arduino's do have pull up resistors on the I2C bus) Command reference: To send data to the I2C LCD board you will need to use I2C and address it to the device's I2C id. Use ASCII values to send individual characters to the display (e.g. '65' is 'A'). {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>ASCII</b> |style="background-color:#f2f2f2;"|<b>Description</b> |- |12 |Clear Display |- |10 |Enable Character Positioning (must be followed by row and column, see below) |- |32-126 |Standard ASCII Characters |} Character positioning Use the '10' special command to position a character on the display. Example: send: 10 (enables character positioning) send: 1 (go to first row) send: 12 (go to 12th column) send: 66 (send the letter 'B') Example code for arduino: <pre> // put random characters on random places on the display #include <Wire.h> int device_id=61; void welcome_text() { Wire.beginTransmission(device_id); // define device nr to transmit to Wire.send(12); // clear the display Wire.send("--- I2C Demo ---"); // welcome text line 1 Wire.endTransmission(); // stop transmitting delay(3000); Wire.beginTransmission(device_id); // define device nr to transmit to Wire.send(12); // clear the display Wire.endTransmission(); // stop transmitting } void setup() { Wire.begin(); // join i2c bus (address optional for master) Wire.beginTransmission(device_id); // define device nr to transmit to Wire.send(12); // clear the display Wire.endTransmission(); // stop transmitting } void loop() { byte x,y,z,letter; welcome_text(); for (z=255; z > 10; z=z-10) { letter=random(65,91); y=random(1,3); x=random(1,17); Wire.beginTransmission(device_id); // define device nr to transmit to Wire.send(10); // enable character positioning Wire.send(y); // row: Wire.send(x); // col: Wire.send(letter); // place a letter Wire.endTransmission(); // stop transmitting delay(z*2); Wire.beginTransmission(device_id); // define device nr to transmit to Wire.send(10); // enable character positioning Wire.send(y); // row: Wire.send(x); // col: Wire.send(" "); // overwrite the letter with space Wire.endTransmission(); // stop transmitting } } </pre> ==Gallery== Below you can see the display is connected to an Arduino Duemilanove over I2C. The Arduino is sending out some text and the display board puts it on the screen. [[Image:0051-lcd-i2c.jpg|none]] [[Image:0051-side-with-lcd.jpg|none]] Side-view of the board with the LCD unit mounted on top. The LCD unit used is the one Jaycar sells in Australia. Model number is SD1602. [[Image:0051-top-bare.jpg|none]] Top-view of the board without the LCD unit. Here you can clearly see the serial shift register chip I used to save on data pins to the mcu. [[Image:0051-top-with-lcd.jpg|none]] Top-view of the board with the LCD unit mounted. [[Image:0051-bottom.jpg|none]] Working prototype (June 2011) [[File:0051-lcd-i2c-board.JPG|none]] Custom pcb for this project Here is a movie of I2C in action. I slowed down the sending of signals on an I2C master and enabled the display of control characters on the LCD board. <mediaplayer useSWF=false autoplay=false image=/swf/img/lcd-i2c-demo.jpg>/swf/i2c-demo.flv</mediaplayer> An explanation of the codes on the display: S = Start sequence detected M = L = A = LCD generates Acknowledge L = P = Stop sequence detected ==Purchasing a board== (all out of stock!) de782229f5ca5dccf3acbeb3b20ab7468cd5da81 File:Gettemp vb-express-2005 V8.zip 6 296 1309 2014-01-12T01:25:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Gettemps linux.tar.gz 6 297 1311 2014-01-12T01:34:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0088-AVR-programmer 0 288 1313 1298 2014-01-12T10:49:44Z Admin 1 wikitext text/x-wiki The finished result of this project is to create an AVR-compatible In-Circuit Serial Programmer using an ATtiny85 as the controller. The board will interface using the open-source USB protocol and is able to program a range of AVR compatible microcontrollers with it. The cost is around $16 for which you can easily purchase a fully assembled and tested device, but I just found it so neat to be able to create my own programmer. The schematic, code and drivers listed on this page are mostly all works of others so I will not take credit for that. I merely have this page here to show you how it's done and what the end result looks like. * source code * binary (.HEX) Firmware version 1.3 [[File:Littlewire v13.zip]] Firmware version 1.1 [[File:Combined.zip]] * program the programmer I used a pololu programmer to program this project onto a new ATtiny85 microcontroller. These are the commands to flash the hex file into the chip: (I copied the contents of a little batch file) <pre> set PROJECT=littlewire_v13 set PORT=\\.\USBSER000 set GCC_DEVICE=attiny85 set PGM_DEVICE=t85 set PGM_PROTO=avrispv2 echo erase chip avrdude -c %PGM_PROTO% -P %PORT% -p %PGM_DEVICE% -e echo write program to chip avrdude -c %PGM_PROTO% -P %PORT% -p %PGM_DEVICE% -U flash:w:%PROJECT%.hex -U lfuse:w:0xe1:m -U hfuse:w:0x5d:m -U efuse:w:0xfe:m </pre> * Final result * usage instructions Before I created my own programmer I was using the (also very simple) programmer from Pololu. In order to program avr's with this programmer I used the following avrdude command line: Pololu programmer avrdude command to program an ATtiny85 <pre> set PORT=\\.\USBSER000 set PGM_PROTO=avrispv2 avrdude -F -c %PGM_PROTO% -P %PORT% -p t85 -U flash:w:myproject.hex -D </pre> With the new programmer I have to change things slightly, just tell avrdude we're using a different programmer: <pre> set PORT=\\.\USBSER000 set PGM_PROTO=usbtiny avrdude -F -c %PGM_PROTO% -P %PORT% -p t85 -U flash:w:myproject.hex -D </pre> * drivers for windows [[File:LittleWire driver.zip]] NOTE: the drivers for Linux are already supported in recent Linux kernels. * source design from LittleWire http://littlewire.cc/ acc8563dfbcbdf78b4234cf2d2ed281967a10915 File:PCA9535 demo-board copper.jpg 6 304 1332 2014-01-26T09:43:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:PCA9535 demo-board component side.jpg 6 305 1334 2014-01-26T09:45:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:PCA9535-to-DIP18.png 6 306 1337 2014-01-26T10:00:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:PCA9535 Arduino demo.zip 6 307 1349 2014-01-26T10:30:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 PCA9535 IO expansion port 0 299 1354 1353 2014-01-27T05:24:44Z Admin 1 /* Schematic */ wikitext text/x-wiki The PCA9535 and PCA9535C are 24-pin CMOS devices that provide 16 bits of General Purpose parallel Input/Output (GPIO) expansion for I2C-bus/SMBus applications. Example schematic and code for Arduino Duemilanove and UNO (and possibly others). ==Schematic== [[File:PCA9535 demo circuit.png]] Brief explanation: * The Arduino provides 5V to the port expander and LEDs through the I2C header * The Arduino I2C pins are on Analog In port 4(SDA) and 5(SCL) (not shown) * The INT line is held high to VCC with a 10k pullup resistor * A 100R current limiting resistor is in line to HDR1:3 to provide +5V for a small probe lead * The I2C address is set to 0x20 (decimal 32) by pulling A0, A1 and A2 low to ground * HDR1:0 to 2 and the two LEDs are all on channel 0 * HDR2:0 to 1 are all on channel 1 * 100k pulldown resistors to ground are placed on all input pins * 4k7 pullup resistors to +5V for the I2C lines are added on the Arduino side of the I2C bus (not shown) ==Demo Circuit Board== In order to work with the SOIC package I decided to re-route some pins and not break out all ports so I could mount it on a DIP18 socket. The re-mapped pins and the completed demo board are shown below: [[File:PCA9535-to-DIP18.png]] [[File:PCA9535 demo-board component side.jpg]] [[File:PCA9535 demo-board copper.jpg]] ==Code== <pre> /* Arduino demo code for the PCA9535 I2C port expander. Compatible with Arduino IDE version 1.0.5 Last modified: 26 January 2014 */ #include <Wire.h> // I2C 9535 device address is 0 1 0 0 0 0 0 (0x20, or 0d32) #define PCA9535_ADDR 32 int ch0=0; int ch1=0; void setup() { Wire.begin(); // setup channel 0 and 1 Wire.beginTransmission(PCA9535_ADDR); Wire.write(6); // configure port 0 registers Wire.write(B00111111); // set bit 6+7 as output, the rest input Wire.write(B11111111); // set all as input Wire.endTransmission(); } void loop() { PCA_ReadBytes(); // read the values of channel 0 and 1 // channel 0 if (bitRead(ch0,0)) { // bit 0 of channel 0 is set high blinkLed(0,1); // blink one time } if (bitRead(ch0,1)) { // bit 1 of channel 0 is set high blinkLed(0,2); // blink two times } if (bitRead(ch0,2)) { // bit 2 of channel 0 is set high blinkLed(0,3); // blink three times } // channel 1 if (bitRead(ch1,0)) { // bit 0 of channel 0 is set high blinkLed(1,1); // blink one time } if (bitRead(ch1,1)) { // bit 1 of channel 0 is set high blinkLed(1,2); // blink two times } delay(1000); delay(1000); } void blinkLed(int lednr, int times) { if (lednr==0) { lednr=B01000000; // bit 6 goes to the RED led } else { lednr=B10000000; // bit 7 goes to the GREEN led } while (times>0) { // turn led on I/O 0, pin 6 or 7 Wire.beginTransmission(PCA9535_ADDR); Wire.write(2); // select IO channel 0 Wire.write(lednr); // turn on port on bit 6 or 7 Wire.endTransmission(); delay(100); all_off(); delay(300); times--; } } void all_off() { // turn off all outputs Wire.beginTransmission(PCA9535_ADDR); Wire.write(2); // select IO channel 0 output registers Wire.write(B00000000); // turn off all ports on channel 0 Wire.endTransmission(); } void PCA_ReadBytes() { // reads the input registers of the PCA9535 device // read channel 0 first Wire.beginTransmission(PCA9535_ADDR); Wire.write(0); // we want to read channel 0 first Wire.endTransmission(); Wire.requestFrom(PCA9535_ADDR,2); // read two bytes if(Wire.available()) { ch0 = Wire.read(); // read channel 0 ch1 = Wire.read(); // read other channel (channel 1) } Wire.endTransmission(); } </pre> Download the above code as a .zip file here. Arduino source code: [[File:PCA9535 Arduino demo.zip]] ==Something on I2C bus speed for the Arduino== The following blurb on I2C speeds is not relevant in order to get the PCA9535 to work, because it works just fine with the standard Arduino. However, for debugging purposes it is very handy to know that the I2C bus speed can be modified. I didn't have a better place to put this info, so here it is.. The default prescaler is 1, and the default value for TWBR (on the Uno etc.) is 72. Thus: freq = 16000000 / (16 + 144) = 100000 TWBR prescaler Frequency 12 1 400 kHz (the maximum supported frequency) 32 1 200 kHz 72 1 100 kHz (the default) 152 1 50 kHz 78 4 25 kHz 158 4 12.5 kHz To set the prescaler to 4 you need to set the bit TWPS0 in TWSR, so for example to have a clock of 12.5 kHz: <pre> Wire.begin (); TWBR = 158; TWSR |= _BV (TWPS0); </pre> The internal buffer used for I2C communications is 32 bytes. That means you can transfer a maximum of 32 bytes in one transaction. It also isn't particularly clear, but the functions Wire.beginTransmission and Wire.write don't actually send anything. They simply prepare an internal buffer (with a maximum length of 32 bytes) for the transmission. This is so that the hardware can then clock out the data at a high rate. For example: <pre> Wire.beginTransmission (SLAVE_ADDRESS); // prepare internal buffer Wire.write ("hello world"); // put data into buffer byte result = Wire.endTransmission (); // transmission occurs here </pre> Source: http://www.gammon.com.au/forum/?id=10896 a3ba14e1efd62e5547dccba27a98c4e770239b43 File:PCA9535 demo circuit.png 6 301 1355 1352 2014-01-27T05:26:38Z Admin 1 Admin uploaded a new version of &quot;[[File:PCA9535 demo circuit.png]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Mcu 0053-avr-fuse-resetter.jpg 6 308 1356 2014-01-27T05:29:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0053-AVR-Fuse-Resetter 0 115 1357 1056 2014-01-27T05:29:39Z Admin 1 wikitext text/x-wiki {{Infobox | name = 0053-AVR-Fuse-Resetter | image = [[File:Mcu 0053-avr-fuse-resetter.jpg|150px]] | imagecaption = description | author = Marcel Post | mcu = ATtiny84 | initial_release_date = Month Year | last_modified_date = Oct 2011 | pcb_layers = 2 | project_status = incomplete }} AVR High-voltage Serial Fuse Reprogrammer ==Description== When playing with fuse bits (e.g. to set clock frequency, watchdog timer, etc..) it's easy to 'brick' your microcontroller. The only way out is to override the fuse bits with High Voltage (just 12V is enough) programming. This project runs code on an ATtiny84 and contains some default reset values for ATtiny fuse bits. Insert your bricked ATtiny in the empty socket and press the button to reset it. Optionally an LCD is provided to give more information on the process. Adapted from code and design by Paul Willoughby 03/20/2010 http://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/ ==Timeline== 2012-10-13 * updating this page with what's new: * re-designed the board without the LCD panel (it's now just a 4-pin header connection) * ordered a 28pin ZIF socket to hold both 14-pin and 8-pin AVR's * ordered and received new PCB's from OSH Park (previously Dorkbot PDX). Very good quality (purple boards with gold?plated solder mask) and reasonably priced. * already built two units of which one has a firmware loaded in it. Had to make several code changes so the code on this site is not the most recent(!) * will upload the latest designs and source code for AVR ATtiny84 as the programmer/flasher. * stay tuned.. ;-) 2011-10-23 * verified working of avr resetter code in arduino. * Added very basic LCD I2C code to ATtiny84 ==Schematic== [[File:0053-sch-v1.0.jpg|thumb|none]] View schematic as pdf (Oct 2011) [[File:0053-sch-v1.0.pdf]] By no means finished but a step in the right direction. ==Circuit Board== [[File:0053-pcb-3d-v1.0.jpg|none]] [[File:0053-pcb-v1.0.jpg|none]] By no means finished but a step in the right direction. ==Software== Latest source code: [[File:0053-avr-fuse-resetter.zip]] ==Release Notes== ==Gallery== [[File:Mcu 0053-avr-fuse-resetter.jpg]] ==External Links== http://www.atmel.com/avr/ b6e1829c4942436c43d9e0dee4ca96c0008a1b4a I2c-master 0 310 1372 2014-03-16T10:59:49Z Admin 1 Created page with "These code snippets and functions are intended for an I2C master device. Functions: * address an I2C slave and write data to it * address an I2C slave and read data from it ..." wikitext text/x-wiki These code snippets and functions are intended for an I2C master device. Functions: * address an I2C slave and write data to it * address an I2C slave and read data from it ==initialisation== <pre> // I2C definitions int LCD_I2C_DEVICE_ID=58; #define SCL PA4 #define SDA PA5 #define I2C_SCL_T_HIGH_US 50 #define I2C_SCL_T_LOW_US 50 // Testing i2c reads with 24LC256 EEPROM module #define I2C_EEPROM 0x50 // ID# of eeprom int got_ack; int I2C_STRETCH_TIMEOUT_MS=10; // how long to wait for a slave that's stretching the clock unsigned int i2c_timeout=65535; // when listening for read replies </pre> ==functions== <pre> // --- I2C Functions --- // --- I2C Functions --- // --- I2C Functions --- void setPin(int line, int state) { // set the I2C SDA or SCL PIN if (state == LOW) // if state = 0 { // set the pin low DDRA |= (1 << line); // set line to output PORTA &= ~(1 << line); // set it to zero } else { // set the pin high (let external pull-up resistor bring it high) DDRA &= ~(1 << line); // set line to input } } void i2c_tx(char d) { // SDA is LOW, SCL is high (inherited from START sequence) // 1010 0000 0 0000 00000 0 0001 0101 0 00010 // 80 << 1 W A // bring clock low to start data transfer setPin(SCL,LOW); _delay_us(I2C_SCL_T_LOW_US); char x; //static int b; for(x=8; x; x--) { if(d&0x80) { setPin(SDA,HIGH); } else { setPin(SDA,LOW); } setPin(SCL,HIGH); // strobe clock // allow for I2C clock stretching (SCL can be held low by slave) // see I2C_STRETCH_TIMEOUT_MS int stretch_counter; for (stretch_counter=0; stretch_counter < I2C_STRETCH_TIMEOUT_MS; stretch_counter++) { // allow for some cycles for SCL to go high if (bit_is_clear(PINA,SCL)) { // SCL is held low by slave // we'll just wait a little _delay_us(5); } else { // SCL has risen, ready to move on stretch_counter = I2C_STRETCH_TIMEOUT_MS; } } _delay_us(I2C_SCL_T_HIGH_US); // if everything went fine we still need to make sure setPin(SCL,LOW); // we're waiting at least 4us until we can bring SCL LOW _delay_us(I2C_SCL_T_LOW_US); d <<= 1; // shift byte } // read acknowledge bit if any _delay_us(I2C_SCL_T_LOW_US); setPin(SDA,HIGH); // first bring SDA into listening mode // An addressed i2c slave that wants to set an ACK will have already set SDA low. // If the slave doesn't respond to the ACK we need to make sure not to see a false // positive from our own SDA pin _delay_us(I2C_SCL_T_HIGH_US); // give the bus some time to possibly bring the pin high setPin(SCL,HIGH); // start the clock pulse // check if slave set an ack on the SDA line or not if (bit_is_set(PINA,SDA)) { got_ack=0; } else { got_ack=1; } //setPin(SDA,LOW); // we now bring SDA low //_delay_us(10); // give the bus some time to prevent slaves from detecting this as a false stop? ----- may go _delay_us(I2C_SCL_T_HIGH_US); setPin(SCL,LOW); // end the clock pulse // show ack result here.. // slave detects SCL is low and will release SDA // need an extra bit of delay here for our I2C LCD Module // _delay_us(100); _delay_us(I2C_SCL_T_LOW_US); // this should be 10us or so _delay_us(I2C_SCL_T_LOW_US); // this should be 10us or so // -- end of i2c_tx function -- // function ends with: // // SDA: HIGH // SCL: LOW } void i2c_start() { // SDA goes from high to low while SCL is high // we expect both SDA and SCL to be high //_delay_us(500); //setPin(SDA,HIGH); //_delay_us(500); // give bus some time to bring SDA high //setPin(SCL,HIGH); //_delay_us(100); setPin(SDA,LOW); _delay_us(I2C_SCL_T_LOW_US); } void i2c_write(char i2c_id) { i2c_start(); // send the I2C Device ID // send as Write (last bit is 0) i2c_tx(i2c_id<<1); } void i2c_stop() { // SDA goes from low to high while SCL is high // we expect SCL to be low but don't know the state of SDA // therefore we force SCL to be low so we don't accidentally // generate a .. and then bring down SDA so we begin with // a known start condition. setPin(SCL,LOW); _delay_us(I2C_SCL_T_LOW_US); // give bus some time to bring SCL LOW setPin(SDA,LOW); _delay_us(I2C_SCL_T_LOW_US); // give bus some time to bring SDA LOW // initiate STOP sequence setPin(SCL,HIGH); _delay_us(I2C_SCL_T_HIGH_US); setPin(SDA,HIGH); _delay_us(I2C_SCL_T_HIGH_US); } void i2c_lcd_text(char *StrData) { int p = 0; int q = strlen(StrData); int temp = 0; for (p = 0; p < q; p++) { temp = StrData[p]; i2c_tx(temp); } } void i2c_lcd_number(int number) { int digits; if (number == 0) { digits = 0; int array[0]; array[0]=0; i2c_tx(array[0]+48); } else { // determine the number of digits digits = (int) (log(number)/log(10))+1; // split up the number's digits into an array int i = digits -1; int array[digits]; while (number > 0) { array[i--] = number % 10; number /= 10; } // send array over i2c for (i =0; i <= digits-1; i++) { i2c_tx(array[i]+48); } } } void i2c_cls(uint8_t device) { // send out Clear LCD command to I2C_LCD device i2c_write(device); i2c_tx(12); // blank lcd command i2c_stop(); } void i2c_pos (uint8_t device, uint8_t row, uint8_t col) { // positions the cursor on an I2C_LCD device i2c_write(device); i2c_tx(10); // i2c position command i2c_tx(row); // row position i2c_tx(col); // col position i2c_stop(); } void i2c_write_number(uint8_t device, int16_t number) { // write a number to an I2C_LCD device i2c_write(device); i2c_lcd_number(number); i2c_stop(); } unsigned char i2c_rxbyte() { // read a byte from an i2c slave we just addressed with its ID and the register we wish to read unsigned char rxbyte=0; int bitcount=8; // i2c_tx ends with: // SDA: HIGH // SCL: LOW // the ic2_tx command lastly sent the ack pulse and now has SDA and SCL set to LOW // we now control the read from the i2c slave device by pulsing SCL and reading SDA while (bitcount > 0) { rxbyte = rxbyte << 1; // shift all bits in rxbyte one position to the left setPin(SCL,HIGH); // start the clock pulse _delay_us(I2C_SCL_T_HIGH_US); // give the bus some time to possibly bring the pin high if (bit_is_set(PINA,SDA)) { // -- detected bit '1' -- rxbyte |= 1 << 0 ; // sets bit 0 of rxbyte to 1 } else { // -- detected bit '0' -- } setPin(SCL,LOW); // stop the clock pulse _delay_us(I2C_SCL_T_LOW_US); // give the bus some time to possibly bring the pin high bitcount--; // decrement bitcounter } // send ack clock pulse setPin(SCL,HIGH); // start the clock pulse _delay_us(I2C_SCL_T_HIGH_US); setPin(SCL,LOW); // stop the clock pulse _delay_us(I2C_SCL_T_HIGH_US); return rxbyte; } unsigned char i2c_read(uint8_t i2c_id, uint16_t DEV_REG) { // reading a register from an eeprom device unsigned char read_result=0; i2c_id = i2c_id<<1; // shift all bits one position to the left (i.e. multiply by 2) // send start sequence i2c_start(); // send the I2C Device ID with the R/W bit low (send as Write, last bit is 0) i2c_tx(i2c_id); //_delay_us(10); // send the register we want to query to the device // for the 74LC256 we need to do this in two goes. First the MSB then the LSB i2c_tx(DEV_REG >> 8); // MSB i2c_tx(DEV_REG & 0xFF); // LSB // i2c_tx alread has a delay at the end // i2c_tx ends with: // SDA: HIGH // SCL: LOW // -- send repeated start -- // in order to generate a valid repeated-start we must make sure SCL is high //setPin(SCL,HIGH); //_delay_us(10); // -- or -- // send stop i2c_stop(); _delay_us(I2C_SCL_T_LOW_US); // send start sequence again i2c_start(); // i2c_start ends with: // SDA: LOW // SCL: HIGH // i2c_tx will bring SDA low again in order to start a valid transmission // send the I2C Device ID with the R/W bit high (send as Read, last bit is 1) i2c_id |= 1 << 0; // set bit 0 to 1 i2c_tx(i2c_id); // i2c_tx ends with: // SDA: HIGH // SCL: LOW // read data from device, one byte long read_result=i2c_rxbyte(); i2c_stop(); return read_result; } // -- end I2C functions -- // -- end I2C functions -- // -- end I2C functions -- </pre> ==usage== <pre> int main() { setPin(SDA,HIGH); setPin(SCL,HIGH); uint8_t eeadr=0; int getvalue=0; while (eeadr < 25) { getvalue=i2c_read(I2C_EEPROM,eeadr); Write_Serial_Number(eeadr); Write_Serial_Data(','); Write_Serial_Number(getvalue); Write_Serial_Text(crlf); // crlf eeadr++; } } </pre> e51c8b1809306a94bdd394940f88f63e670407d6 I2C 0 260 1373 1371 2014-03-16T11:01:33Z Admin 1 wikitext text/x-wiki various: [[i2c-master]] [[i2c-slave]] I'm currently working on coding a reliable I2C library that can act as a master, slave or both. The current library is not a stand-alone file, but needs to be included in the code. Below is the latest (not fully operational) i2cmaster.h, use at own risk. <pre> // --- I2C Functions --- // --- I2C Functions --- // --- I2C Functions --- void i2cpin(int line, int state) { // set the I2C SDA or SCL PIN // works on the PORTB registers if (state == 0) { // set the pin low DDRB |= (1 << line); // set line to output PORTB &= ~(1 << line); // set it to zero } else { // set the pin high (let external pull-up resistor bring it high) DDRB &= ~(1 << line); // set line to input } //_delay_ms(500); // use this as a debug tool } void i2c_delay() { // default delay in between I2C commands _delay_ms(10); // seems to hover around 2-3ms } void i2c_tx(char d) { // SDA is LOW, SCL is HIGH (inherited from i2c-start command) // bring clock low to start data transfer i2cpin(SCL,LOW); char x; //static int b; for(x=8; x; x--) { if(d&0x80) { i2cpin(SDA,HIGH); } else { i2cpin(SDA,LOW); } i2cpin(SCL,HIGH); // strobe clock // allow for I2C clock stretching (SCL can be held low by slave) // see I2C_STRETCH_TIMEOUT_MS int stretch_counter; for (stretch_counter=0; stretch_counter < I2C_STRETCH_TIMEOUT_MS; stretch_counter++) { // allow for some cycles for SCL to go high if (bit_is_clear(PINB,SCL)) { // SCL is held low by slave // we'll just wait a little _delay_ms(1); } else { // SCL has risen, ready to move on stretch_counter = I2C_STRETCH_TIMEOUT_MS; } } //_delay_us(1); // 1-3 us i2cpin(SCL,LOW); d <<= 1; // shift byte } i2cpin(SDA,HIGH); // first bring SDA into listening mode //_delay_ms(1); // delay no longer needed, this used to be 1.6ms //_delay_us(600); // read acknowledge bit if any // an addressed i2c slave will have already set SDA low _delay_us(5); // give the bus some time to possibly bring the pin high i2cpin(SCL,HIGH); // start the clock pulse _delay_us(5); // this should be 10us or so if (bit_is_set(PINB,SDA)) { got_ack=0; } else { got_ack=1; } i2cpin(SDA,LOW); // we now bring SDA low _delay_us(10); // give the bus some time? ----- may go i2cpin(SCL,LOW); // end the clock pulse // slave detects SCL is low and will release SDA _delay_ms(3); // this should be 10us or so // return b; } void i2c_start(char i2c_id) { // SDA goes from high to low while SCL is high i2cpin(SDA,HIGH); _delay_us(10); // give bus some time to bring SDA high i2cpin(SCL,HIGH); _delay_us(10); i2cpin(SDA,LOW); _delay_us(10); // send the I2C Device ID // send as Write (last bit is 0) i2c_tx(i2c_id<<1); } void i2c_stop() { // SDA goes from low to high while SCL is high i2cpin(SDA,LOW); _delay_us(20); // give bus some time to bring SDA high i2cpin(SCL,LOW); _delay_ms(6); i2cpin(SCL,HIGH); _delay_ms(6); i2cpin(SDA,HIGH); _delay_ms(4); } void i2c_lcd_text(char *StrData) { int p = 0; int q = strlen(StrData); int temp = 0; for (p = 0; p < q; p++) { temp = StrData[p]; i2c_tx(temp); } } void i2c_lcd_number(int number) { int digits; if (number == 0) { digits = 0; int array[0]; array[0]=0; i2c_tx(array[0]+48); } else { // determine the number of digits digits = (int) (log(number)/log(10))+1; // split up the number's digits into an array int i = digits -1; int array[digits]; while (number > 0) { array[i--] = number % 10; number /= 10; } // send array over i2c for (i =0; i <= digits-1; i++) { i2c_tx(array[i]+48); } } } void i2c_lcd_hex(uint8_t x) { // sends one byte in hex (without 0x prefix) to the lcd char nibble; /* extract high nibble */ nibble = x & 0xf0; // (resets lower nibble to all zero's) nibble = x >> 4; // (moves high nibble to lower nibble) // output the high nibble if(nibble < 10) { i2c_tx(48 + nibble); } else { i2c_tx(65 + nibble - 10); } /* do the same on the low nibble */ nibble = x & 0x0f; if(nibble < 10) { i2c_tx(48 + nibble); } else { i2c_tx(65 + nibble - 10); } } </pre> usage: in main() <pre> // -- set up lines for I2C -- pinMode(SDA,INPUT); pinMode(SCL,INPUT); PORTB = 0; // disable internal pullup resistors PORTB &= ~(1 << SDA); // set SDA LOW (makes line output) PORTB &= ~(1 << SCL); // set SCL LOW (makes line output) i2c_start(LCD_I2C_DEVICE_ID); i2c_tx(12); //clear screen i2c_tx(' '); i2c_lcd_number(voltage_int); // measured voltage, whole numbers i2c_tx('.'); i2c_lcd_number(voltage_dec1); // decimal 1 i2c_lcd_number(voltage_dec2); // decimal 2 i2c_tx('V'); i2c_tx(' '); i2c_tx(' '); i2c_lcd_number(run_counter); i2c_stop(); </pre> <pre> /* i2cmaster.h defines functions for bit-banging the I2C protocol on generic I/O pins Author: M. Post Last modified: 28 January 2012 Add the following to your main.c in order to make use of this header file: #define HIGH 1 #define LOW 0 #define INPUT 1 #define OUTPUT 0 // I2C pin definitions #define SCL PB0 // Define Clock pin #define SDA PB1 // Define Data pin int got_ack; int LCD_I2C_DEVICE_ID=58; int I2C_STRETCH_TIMEOUT_MS=100; <other includes> #include "i2cmaster.h" <defines, rest of code, etc..> */ void setPin(int line, int state) { // set the I2C SDA or SCL PIN if (state == LOW) { // set the pin low DDRB |= (1 << line); // set line to output PORTB &= ~(1 << line); // set it to zero } else { // set the pin high (let external pull-up resistor bring it high) DDRB &= ~(1 << line); // set line to input } } void i2c_delay() { // default delay in between I2C commands _delay_ms(10); // seems to hover around 2-3ms } void i2c_tx(char d) { int stretch_counter; char x; // SDA is LOW, SCL is HIGH (inherited from i2c-start command) // bring clock low to start data transfer setPin(SCL,LOW); for(x=8; x; x--) { //_delay_us(10); // (additional time inbetween scl pulses) // if statement: if (d & 0x80) // 0x80 = 128d = 10000 0000b if(d&0x80) { _delay_us(15); setPin(SDA,HIGH); } else { setPin(SDA,LOW); } _delay_us(30); // (additional time before scl pulse) setPin(SCL,HIGH); // strobe clock // allow for I2C clock stretching (SCL can be held low by slave) // see I2C_STRETCH_TIMEOUT_MS for (stretch_counter=0; stretch_counter < I2C_STRETCH_TIMEOUT_MS; stretch_counter++) { // allow for some cycles for SCL to go high if (bit_is_clear(PINB,SCL)) { // SCL is held low by slave // we'll just wait a little _delay_ms(1); } else { // SCL has risen, ready to move on stretch_counter = I2C_STRETCH_TIMEOUT_MS; } } //_delay_us(10); // additional SCL-high time setPin(SCL,LOW); d <<= 1; // shift byte } // byte is now sent // next is to read a possible ack from the slave device // scl is already set low by the master setPin(SDA,HIGH); // first bring SDA into listening mode // read i2c slave acknowledge bit if any // an addressed i2c slave will set SDA low very quickly _delay_us(40); // space between the previous SCL pulse setPin(SCL,HIGH); // start the clock pulse //_delay_us(5); // this should be 5us or so if (bit_is_set(PINB,SDA)) { got_ack=0; } else { got_ack=1; } setPin(SDA,LOW); // we now bring SDA low (so we don't see a spike on SDA // when the master brings SCL low again _delay_us(25); // show a nice long SCL high pulse for easier debugging setPin(SCL,LOW); // end the clock pulse // this is also a signal for the i2c slave to release SDA _delay_us(10); // give the bus some time } void i2c_start() { // SDA goes LOW while SCL is HIGH // TODO: check the state of the lines first (they should both be HIGH) _delay_us(10); setPin(SDA,LOW); // start condition _delay_us(10); } void i2c_repeatedstart() { // SDA goes LOW while SCL is HIGH // first bring SCL and SDA LOW (SCL and SDA should already be low) _delay_us(10); setPin(SCL,LOW); _delay_us(10); setPin(SDA,LOW); // then we bring them both HIGH _delay_us(10); setPin(SDA,HIGH); _delay_us(10); setPin(SCL,HIGH); _delay_us(100); // then we generate the repeated start condition setPin(SDA,LOW); _delay_us(100); setPin(SCL,LOW); _delay_us(100); } void i2c_startRead(char i2c_id) { // SDA goes from high to low while SCL is high i2c_start(); // send the I2C Device ID // send as Read (last bit is 1) i2c_id = i2c_id << 1; // shift all bits one position to the left i2c_id |= 1 << 0; // then set bit 0 to 1 i2c_tx(i2c_id); } void i2c_startWrite(char i2c_id) { // SDA goes from high to low while SCL is high i2c_start(); // send the I2C Device ID // send as Write (last bit is 0) i2c_id = i2c_id << 1; // shift all bits one position to the left i2c_id |= 0 << 0; // then set bit 0 to 0 i2c_tx(i2c_id); } void i2c_stop() { // SDA goes HIGH while SCL is HIGH // TODO: check if both lines are low _delay_us(10); setPin(SCL,LOW); _delay_us(10); setPin(SDA,LOW); _delay_us(10); setPin(SCL,HIGH); _delay_us(100); // at least 100 us for I2C_LCD module :-/ setPin(SDA,HIGH); // stop condition _delay_us(10); } void i2c_lcd_text(char *StrData) { int p = 0; int q = strlen(StrData); int temp = 0; for (p = 0; p < q; p++) { temp = StrData[p]; i2c_tx(temp); } } void i2c_lcd_number(int number) { int digits; if (number == 0) { digits = 0; int array[0]; array[0]=0; i2c_tx(array[0]+48); } else { // determine the number of digits digits = (int) (log(number)/log(10))+1; // split up the number's digits into an array int i = digits -1; int array[digits]; while (number > 0) { array[i--] = number % 10; number /= 10; } // send array over i2c for (i =0; i <= digits-1; i++) { i2c_tx(array[i]+48); } } } void i2c_lcd_hex(uint8_t x) { // sends one byte in hex (without 0x prefix) to the lcd char nibble; /* extract high nibble */ nibble = x & 0xf0; // (resets lower nibble to all zero's) nibble = x >> 4; // (moves high nibble to lower nibble) // output the high nibble if(nibble < 10) { i2c_tx(48 + nibble); } else { i2c_tx(65 + nibble - 10); } /* do the same on the low nibble */ nibble = x & 0x0f; if(nibble < 10) { i2c_tx(48 + nibble); } else { i2c_tx(65 + nibble - 10); } } unsigned char i2c_rxbyte() { unsigned char rxbyte=0; int bitcount=8; setPin(SDA,HIGH); // release SDA so we can listen what the slave has to say // the ic2_tx command lastly sent the ack pulse and now has SDA and SCL set to LOW // we now control the read from the i2c slave device by pulsing SCL and reading SDA while (bitcount > 0) { rxbyte = rxbyte << 1; // shift all bits in rxbyte one position to the left setPin(SCL,HIGH); // start the clock pulse _delay_us(I2C_SCL_T_HIGH_US); // give the bus some time to possibly bring the pin high if (bit_is_set(PINB,SDA)) { // -- detected bit '1' -- rxbyte |= 1 << 0 ; // sets bit 0 of rxbyte to 1 } else { // -- detected bit '0' -- } setPin(SCL,LOW); // stop the clock pulse _delay_us(I2C_SCL_T_LOW_US); // give the bus some time to possibly bring the pin high bitcount--; // decrement bitcounter } setPin(SCL,HIGH); return rxbyte; } unsigned char i2c_read(uint8_t i2c_id, uint16_t DEV_REG) { // reading the memory address contents from an I2C Slave Device unsigned char read_result=0; // send start sequence as write (so we can specify which address we want to read) i2c_startWrite(i2c_id); // sends i2c start condition + i2c address+0(w) // send the address word we want to query on the device // for the 24LC256 we need to do this in two goes. First the MSB then the LSB i2c_tx(DEV_REG>>8); // shift 8 bits to the right to get the high byte i2c_tx(DEV_REG & 0xff); // mask out the lower 8 bits to get the low byte // -- send repeated start -- i2c_repeatedstart(); // send the I2C Device ID as Read (last bit is 1) i2c_id = i2c_id << 1; // shift all bits one position to the left i2c_id |= 1 << 0; // then set bit 0 to 1 i2c_tx(i2c_id); // the slave will acknowledge and then transmit the 8-bit data word // read data from device, one byte long read_result=i2c_rxbyte(); i2c_stop(); return read_result; } </pre> 42c5b238c6eb64431d60dfdb1b4cd07d00f367f7 I2c-slave 0 311 1374 2014-03-16T11:05:34Z Admin 1 Created page with "These code snippets and functions are intended for an I2C slave device. Functions: * listen on a set I2C device ID and issue an acknowledge bit when addressed * read incomin..." wikitext text/x-wiki These code snippets and functions are intended for an I2C slave device. Functions: * listen on a set I2C device ID and issue an acknowledge bit when addressed * read incoming bytes when addressed (i.e. master sends the slave a 'write') * detect incoming read requests (i.e. when master sends us the write/read/address sequence) * reply back to read requests (i.e. master sets the clock, slave sets SDA) (code available, just not yet copied here) 9c0d8a2161f8aebfa4baab83305bd976d7aa4d8d File:ISL1208.pdf 6 312 1376 2014-03-17T07:07:04Z Admin 1 I2C Realtime Clock wikitext text/x-wiki I2C Realtime Clock c720bd66d8e91fe9df5d4d61bb535d68f818aea4 File:24LC256-512.pdf 6 313 1378 2014-03-17T07:09:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 C and C++ 0 174 1383 956 2014-03-24T11:01:54Z Admin 1 wikitext text/x-wiki C code examples [[Tips_n_Tricks]] [[Data_Types]] [[ATtiny85_ADC]] [[ATtiny85_shiftout]] [[ATtiny85_PWM]] [[ATtiny84_PWM]] 98c5cc7fa4751b2b43d4fe9e130e14343abfc53d Dovecot basic 0 271 1388 1387 2014-04-24T01:57:21Z Admin 1 /* IMAP sync with Gmail */ wikitext text/x-wiki Dovecot basic * dovecot-imapd * exim4 * fetchmail <pre> apt-get install dovecot-imapd exim4 fetchmail </pre> ===setting up exim=== <pre> dpkg-reconfigure exim4-config </pre> General type of mail configuration: internet site System mail name: mydomain.com IP-addresses to listen on for incoming SMTP connections: No value (all interfaces) Other destinations for which mail is accepted: mydomain.com Domains to relay mail for: No value (no other domains) Machines to relay mail for: No value (no other machines) Keep number of DNS-queries minimal (Dial-on-Demand)? No Delivery method for local mail: Maildir format in home directory Split configuration into small files? Yes ==setting up dovecot== create a new file /etc/dovecot/passwd <pre> test:{PLAIN}pass bill:{PLAIN}secret timo@example.com:{PLAIN}hello123 dave@example.com:{PLAIN}world234 joe@elsewhere.org:{PLAIN}whee jane@elsewhere.org:{PLAIN}mypass </pre> To store passwords encypted, use: <pre> doveadm pw -s ssha Enter new password: foo Retype new password: foo {SSHA}DNODS3ZrOq1bu2MasNk79LxHhlU9iI03 </pre> Note that you won't get the same output after {SSHA} as above, because Dovecot uses random salts when creating the SSHA hash. This means that even if multiple users have the same password, you won't know that because their hashes are different. The passwd file entry would be: <pre> bill:{SSHA}DNODS3ZrOq1bu2MasNk79LxHhlU9iI03 </pre> With the 2.x versions of Dovecot the configuration files have been split up (as opposed to a single dovecot.conf file in 1.x versions). Below are listed the modifications required on the default dovecot config files (after a fresh installation). * /etc/dovecot/dovecot.conf Leave as-is. * /etc/dovecot/conf.d/10-auth.conf <pre> disable_plaintext_auth = no auth_mechanisms = plain !include auth-system.conf.ext </pre> * /etc/dovecot/conf.d/10-mail.conf <pre> mail_location = maildir:~/Maildir </pre> * /etc/dovecot/conf.d/auth-passwdfile-conf.ext <pre> passdb { driver = passwd-file args = /etc/dovecot/users } userdb { driver = passwd-file args = uid=vmail gid=vmail home=/home/vmail/%u } </pre> ==setting up fetchmail== ~/.fetchmailrc <pre> poll localhost with proto POP3 user abc@xyz.org pass bill123 is yyy@gmail.com here </pre> ==IMAP sync with Gmail== apt-get install offlineimap * offlineimaprc example <pre> [general] accounts = Gmail maxsyncaccounts = 1 [Account Gmail] localrepository = Local remoterepository = Remote maxage = 365 [Repository Local] sep = / type = Maildir localfolders = /disk/mail/dovecot/varvmail/mydomain.com/gmail/Maildir nametrans = lambda folder: re.sub('Junk', '[Gmail].Spam', re.sub('Drafts', '[Gmail].Drafts', re.sub('Inbox', '[Gmail].INBOX', re.sub('Trash', '[Gmail].Bin', re.sub('Sent', '[Gmail].Sent Mail', re.sub('Flagged', '[Gmail].Starred', re.sub('Trash', '[Gmail].Trash', re.sub('Important', '[Gmail].Important', re.sub('Archive', '[Gmail].All Mail', folder))))))))) [Repository Remote] type = Gmail remotehost = imap.gmail.com remoteuser = my.email.address@gmail.com remotepass = mypassword ssl = yes maxconnections = 3 realdelete = no ## One-way synching. Perfect for backups. readonly = true nametrans = lambda folder: re.sub('.*Spam$', 'Junk', re.sub('.*Drafts$', 'Drafts', re.sub('.*INBOX$', 'Inbox', re.sub('.*Sent Mail$', 'Sent', re.sub('.*Starred$', 'Flagged', re.sub('.*Trash$', 'Trash', re.sub('.*Bin$', 'Trash', re.sub('.*Important$', 'Important', re.sub('.*All Mail$', 'Archive', folder))))))))) </pre> Usage: host#~: offlineimap -c offlineimaprc Afterwards I reassign vmail as owner and group to all folders to be sure that messages are not left as root:root. host#~: chmod -R vmail:vmail /disk/mail/dovecot/varvmail 4736c12acdf9a913d203817e9a28c7ad31f70435 File:0055-rs232-tempsensor.zip 6 47 1395 1394 2014-04-25T22:43:47Z Admin 1 Admin uploaded a new version of &quot;[[File:0055-rs232-tempsensor.zip]]&quot;: Reverted to version as of 23:13, 31 August 2011 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0055-rs232-tempsensor v2.zip 6 316 1396 1393 2014-04-25T22:44:08Z Admin 1 Admin uploaded a new version of &quot;[[File:0055-rs232-tempsensor v2.zip]]&quot; wikitext text/x-wiki with added support for DS18B20 c37f09aa8a7634a8708dbf8d371a076a51b30a8b File:IMG 20140426 084813.jpg 6 317 1398 2014-05-06T02:51:00Z Admin 1 rs232-tempsensor-attiny85-on-custom-pcb wikitext text/x-wiki rs232-tempsensor-attiny85-on-custom-pcb 5d18399a130bbc9fe61d80fc4be94ca2c2747d21 Mcu 0093-NiMH-battery-charger 0 315 1404 1403 2014-05-15T04:03:39Z Admin 1 wikitext text/x-wiki One of my other projects is a handheld data logger. All along I wanted it to run off batteries but only realised later in the design phase that I wanted it to be powered by rechargeable batteries and use the power from a USB connection to recharge the batteries. I now realise that having a small, customisable charge controller is just the thing I need. That's where this project comes in. It can be used as a stand-alone application to recharge NiMH batteries (initially this design only caters for 2 NiMH AA batteries in series). Design criteria: * use 2x NiMH batteries in series for 3V * use the USB port to obtain the maximum charge current * use battery temperature measurement for deltaT detection * use battery voltage measurement for -deltaV detection 3e44fafa5ae10e205ed0a359a5b2c8a1f9490b16 File:Ambox notice.png 6 322 1455 2014-05-21T00:41:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Info 10 321 1464 1463 2014-05-21T00:55:10Z Admin 1 wikitext text/x-wiki {| class="wikitable" |- style="vertical-align:top" | style="width:80px; text-align:center;" | [[File:Ambox notice.png]] {{{id|Info}}} | style="text-align:left;"|{{{info}}} |} cbc757ab26b057880bb62022b381eb46888b9f9b File:TODO icon.png 6 323 1465 2014-05-21T00:58:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Todo 10 324 1466 2014-05-21T00:59:26Z Admin 1 Created page with "{| class="wikitable" |- style="vertical-align:top" | style="width:80px; text-align:center;" | [[File:TODO_icon.png]] {{{id|TODO}}} | style="text-align:left;"|{{{todo}}} |}" wikitext text/x-wiki {| class="wikitable" |- style="vertical-align:top" | style="width:80px; text-align:center;" | [[File:TODO_icon.png]] {{{id|TODO}}} | style="text-align:left;"|{{{todo}}} |} 54345bb4538bd83afb9a2f9d164a35145f421988 File:0084-pfet-vdiv-0.png 6 325 1469 2014-05-21T11:06:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Australian Magpie.jpg 6 328 1479 2014-06-29T08:06:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Noisy Miner.jpg 6 329 1482 2014-06-29T08:10:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Australian Pelican.jpg 6 330 1484 2014-06-29T08:13:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Laughing Kookaburra.jpg 6 331 1486 2014-06-29T08:17:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blackfacedcuckooshrike.jpg 6 332 1487 2014-06-29T08:19:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Grey-Butcherbird.jpg 6 333 1488 2014-06-29T08:21:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Rainbow lorrikeet.jpg 6 334 1490 2014-06-29T08:22:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Noisy friarbird.jpg 6 335 1491 2014-06-29T08:24:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Crested pigeon.jpg 6 336 1492 2014-06-29T08:26:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Magpie lark.jpg 6 337 1493 2014-06-29T08:30:38Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blind snake.jpg 6 338 1495 2014-06-29T08:33:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Earthworm.jpg 6 339 1496 2014-06-29T08:37:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:White-grub.jpg 6 340 1497 2014-06-29T08:47:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Green tree frog.jpg 6 341 1498 2014-06-29T08:50:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:St Andrews Cross Spider.jpg 6 342 1501 2014-06-29T08:53:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Tea Tree.jpg 6 343 1503 2014-06-29T08:57:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Redback spider.jpg 6 345 1506 2014-06-29T09:12:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Huntsman spider.jpg 6 346 1507 2014-06-29T09:18:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Mud Nest Wasp.jpg 6 347 1508 2014-06-29T09:22:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blue Banded Bee.jpg 6 348 1509 2014-06-29T09:25:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Eastern Rosella.jpg 6 349 1511 2014-06-29T09:28:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Silver-eye.jpg 6 350 1512 2014-06-29T09:30:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Scaly Breasted Lorrikeet.jpg 6 351 1513 2014-06-29T09:31:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Asian koel.jpg 6 352 1514 2014-06-29T09:33:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pied Currawong.jpg 6 353 1516 2014-06-29T09:44:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Common Crow Butterfly.jpg 6 354 1517 2014-06-29T09:52:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Monarch butterfly.jpg 6 355 1518 2014-06-29T09:54:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blue Triangle Butterfly.jpg 6 356 1519 2014-06-29T09:55:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Callistemon.jpg 6 357 1520 2014-06-29T09:58:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Melaleuca.jpg 6 359 1522 2014-06-29T10:01:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blue-tongue Lizard.jpg 6 360 1526 2014-06-29T10:08:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Spotted Ctenotus Skink.jpg 6 361 1527 2014-06-29T10:11:33Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Australian Cockroach.jpg 6 362 1529 2014-06-29T10:16:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Common blue butterfly.jpg 6 363 1530 2014-06-29T10:28:19Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Giant Green Grasshopper.jpg 6 364 1531 2014-06-29T10:31:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Imperial White Butterfly.jpg 6 365 1532 2014-06-29T10:34:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Cabbage white butterfly.jpg 6 366 1533 2014-06-29T10:36:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Indian Myna.jpg 6 367 1535 2014-06-29T10:38:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Australian wood duck.jpg 6 368 1536 2014-06-29T10:40:47Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Australian Raven.jpg 6 369 1537 2014-06-29T10:42:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Christmas Beetle.jpg 6 370 1539 2014-06-29T10:46:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Redeye cicada.jpg 6 371 1540 2014-06-29T10:49:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Floury Baker cicada.jpg 6 372 1541 2014-06-29T10:52:23Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Ladybird-Harmonia conformis.jpg 6 373 1543 1542 2014-06-29T10:53:48Z Admin 1 Admin uploaded a new version of &quot;[[File:Ladybird-Harmonia conformis.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Ladybird-Coccinella transversalis.jpg 6 374 1545 2014-06-29T10:56:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Australian sheep blowfly.jpg 6 375 1546 2014-06-29T10:58:36Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Hoverfly.jpg 6 376 1548 2014-06-29T11:02:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 2014 VK Contest Dates 0 309 1550 1397 2014-07-03T01:35:35Z Admin 1 wikitext text/x-wiki 2014 VK Contest Dates (Phone) <pre> Date Name Start End Bands ------------------------------------------------------------------------ 15-16 Mar John Moyle 0100 - 0059 (24hrs) All bands 3 May Harry Angel 1000 - 1146 (106mins) 3535 - 3665 kHz 10 May VK Trans Tasman 0800 - 1400 (6hrs) 80m 19 Jul VK Trans Tasman 0800 - 1400 (6hrs) 160m 16-17 Aug Rememberance Day 0300 - 0259 (24hrs) All bands 16-17 Aug Intl Lighthouse 0100 - 2359 (48hrs) All bands 4-5 Oct Oceania DX 0800 - 0800 (24hrs) 160/80/40/20/15/10m </pre> Dates in UTC 0747288c9867671aa519c403a1d973431276d9ea File:Common brushtail possum.jpg 6 377 1551 2014-07-27T22:58:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Sound-alsa 0 378 1559 1558 2014-07-29T00:27:29Z Admin 1 wikitext text/x-wiki ALSA (Advanced Linux Sound Architecture) My main focus when I write these pages is on getting sound to work properly with a Raspberry Pi. The techniques in these notes may work on other systems but I have created this page to keep track of RPi related sound information. == default RPi (Raspbian) sound settings == == disabling the on-board sound card === /etc/modules /etc/modprobe.d/modules (to be edited..) == measuring sound volume input level == * display the current input level of sound presented to the recording device <pre> arecord -Dhw:0 -c2 -d 0 -fS16_LE /dev/null -vvv </pre> It just starts a recording but sends the recording to /dev/null rather than saving it, and then around every 10ms it spits back a new line which looks like this: Max peak (2000 samples): 0x000028ca ####### 31% Max peak (2000 samples): 0x00002872 ####### 31% Max peak (2000 samples): 0x000023de ###### 28% Max peak (2000 samples): 0x00002bf3 ####### 34% Max peak (2000 samples): 0x00002cb1 ####### 34% * display the sound system's gain setting of the input channel <pre> 123 </pre> Nothing here yet == alsa config == /etc/asound.conf or ~/.asoundrc <pre> pcm.!default { type asym playback.pcm { type plug slave.pcm "hw:0,0" } capture.pcm { type plug slave.pcm "hw:1,0" } } </pre> This little ALSA configuration setting uses the default sound card as playback device (hw:0,0) and sets hw:1,0 (that suppose to be your USB-mic) to become the default capture device. http://wiki.audacityteam.org/wiki/USB_mic_on_Linux ab0fd72b23e941ee1788326fbde36efe82cb8a86 Rpi-websdr 0 380 1562 2014-07-29T00:39:33Z Admin 1 Created page with "WebSDR is a Software-Defined Radio receiver connected to the internet, allowing many listeners to listen and tune it simultaneously. SDR technology makes it possible that all ..." wikitext text/x-wiki WebSDR is a Software-Defined Radio receiver connected to the internet, allowing many listeners to listen and tune it simultaneously. SDR technology makes it possible that all listeners tune independently, and thus listen to different signals; this is in contrast to the many classical receivers that are already available via the internet. http://websdr.org/ ==Setup websdr on Raspberry Pi== The installer package contains binaries for x86 and ARM. The latter can be used to run on RPi hardware (ARM6). * soundcard setup remove all pulseaudio things as it is plainly confusing use an external sound card that can capture STEREO audio * Softrock 40 SDR receiver hook up to 40m antenna and send audio out (I/Q) to sound card * java runtime environment e9b0bfa87b68b55ac82e2d73de51145066572623 File:R820T.jpg 6 382 1564 2014-07-29T00:47:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Rtlsdr r820t mini float.jpg 6 383 1565 2014-07-29T00:48:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:RTL1090 and VirtualRadar.jpg 6 384 1567 2014-07-29T00:50:32Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Australian Band Plans 140709.pdf 6 385 1571 2014-07-30T00:32:05Z Admin 1 WIA - Australian Amateur Band Plans - updated 09/07/2014 wikitext text/x-wiki WIA - Australian Amateur Band Plans - updated 09/07/2014 cabd06f95b5614d782ea9d5278aa30097df8ab7b Aprs-soundmodem 0 278 1574 1248 2014-08-04T03:22:03Z Admin 1 wikitext text/x-wiki This page describes the modifications and setup required to get a linux box (a Raspberry Pi) working as an aprs iGate. ==sound levels== Alsa is used for the sound system. To check the proper input levels use the command: <code> arecord -Dhw:0 -c2 -d 0 -fdat /dev/null -vvv </code> This will show a rolling output of the recorded sound levels. More alsa options: [[alsa]] http://forums.whirlpool.net.au/archive/1853993 Alsamixer and aumix can both set the sound levels and the following settings are near optimal for me: Alsamixer: PCM Capture: Line Line capture input level: 70 Everything else in alsamixer can be set to mute Btw, if F4 doesn't toggle the recording view, try the TAB key Aumix: Recording device: Line Pcm level: 100% All other levels (including line, as it's line-out) can be set to zero == test soundmodem output == a program called netcat (or ncat) can be used to send single character to the soundmodem ip address (if using MKISS). syntax: <code> netcat -u 44.10.10.1 5000 </code> when issuing the above command user input is expected. Simply type a letter, followed by <ENTER> and the soundmodem should start making AX.25 noises. fc10019b818c77a00f8b80393f0cc037758a8cde File:Rpi-shutdown-button-schematic.png 6 386 1582 1576 2014-09-17T11:34:19Z Admin 1 Admin uploaded a new version of &quot;[[File:Rpi-shutdown-button-schematic.png]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Rpi-shutdown-button-text.jpg 6 387 1583 1580 2014-09-17T11:40:11Z Admin 1 Admin uploaded a new version of &quot;[[File:Rpi-shutdown-button-text.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AH AD9850 20121026.zip 6 389 1588 2014-09-27T08:03:55Z Admin 1 Arduino AVR library for the AD9850 DDS module. Unzip and place directory in the Arduino tree under C:\program files\Arduino\hardware\arduino\avr\libraries\AH_AD9850 wikitext text/x-wiki Arduino AVR library for the AD9850 DDS module. Unzip and place directory in the Arduino tree under C:\program files\Arduino\hardware\arduino\avr\libraries\AH_AD9850 59b28156b047156760d5848c863c284b0b777c1f File:MCU0085-AD9850 signal generator v0.03.zip 6 390 1591 2014-09-27T08:20:52Z Admin 1 arduino project files for a signal generator using the AD9850 DDS module and a 2x16 LCD module. wikitext text/x-wiki arduino project files for a signal generator using the AD9850 DDS module and a 2x16 LCD module. cae18a5b1385a41cc1ca538ae0ddcd7c9d0799f0 AD9850 wave generator 0 388 1592 1590 2014-09-27T08:21:33Z Admin 1 wikitext text/x-wiki The AD9850 is a low-cost DDS signal generator module that can easily produce signals from 0Hz to 40MHz. I built one one an Arduino expansion board and added a 2x16 character LCD module and a rotary encoder knob. Here is the library for adding AH_AD9850.h to the project. [[File:AH_AD9850_20121026.zip]] Unzip and place directory in the Arduino tree under C:\program files\Arduino\hardware\arduino\avr\libraries\AH_AD9850 Arduino project files (included AH_AD9850 library files): [[File:MCU0085-AD9850 signal generator v0.03.zip]] Source for the AD9850 libraries: http://arduino.alhin.de/index.php?n=7 http://arduino-Projekte.de 1e38b780317251c951e98ad0b0e9f909d21a5dc8 File:IC-207H-to-TNC-Pi cable.jpg 6 393 1613 2014-10-07T00:59:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Otusb.jpg 6 394 1615 2014-10-07T02:20:24Z Admin 1 OpenTracker USB TNC wikitext text/x-wiki OpenTracker USB TNC 8423cbae9d630632c278fcc7b0f22fc0e8964eda File:ACP-webgui.png 6 396 1618 2014-10-07T02:24:47Z Admin 1 APRS Control Panel - web gui wikitext text/x-wiki APRS Control Panel - web gui 255a8b580ef828a204fb7ac076cd84c69e99f898 File:Tnc-pi.jpg 6 397 1619 2014-10-07T02:27:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Rpi.jpg 6 398 1620 2014-10-07T02:31:54Z Admin 1 Raspberry Pi Model B (with Ethernet, 2x USB and Composite-Out connector) wikitext text/x-wiki Raspberry Pi Model B (with Ethernet, 2x USB and Composite-Out connector) a1244afc2d751cd1d8f0df2b2f4b19cd2f5844c7 File:Cmedia-CM106-USB-soundcard.jpg 6 399 1622 2014-10-07T03:28:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:IC-207H front.jpg 6 400 1624 2014-10-07T03:40:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Protocols dealing with APRS 0 401 1631 1630 2014-10-22T02:12:20Z Admin 1 wikitext text/x-wiki Over time I hope to expand this page and complete it with relevant details about setting up an APRS station. What is: * [[AX.25]] * [[APRS-protocol]] * [[MIC-E]] * [[APRS-path]] * [[APRS-packet-timestamping]] 2afe2a5e0b0821a9cf92f591c731cebd7fd51168 File:APRS101.PDF 6 403 1633 2014-10-22T02:17:10Z Admin 1 APRS Protocol Reference document, version 1.0.1, 29 August 2000 wikitext text/x-wiki APRS Protocol Reference document, version 1.0.1, 29 August 2000 8a9b93ae305e1217366ee95780a94a9c7301455a APRS-protocol 0 402 1635 1632 2014-10-22T02:19:16Z Admin 1 wikitext text/x-wiki The main documentation for the APRS protocol is listed on www.aprs.org. The document can either be downloaded from their website http://www.aprs.org/doc/APRS101.PDF ..alternatively, a local copy is hosted on this site as well. [[File:APRS101.PDF]] 215057721427aae8740b925c1e28b28362abbafd File:WIDE1-1settings.txt 6 406 1644 2014-10-23T23:16:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 APRS-path 0 405 1646 1645 2014-10-27T03:41:05Z Admin 1 wikitext text/x-wiki The PATH settings when configuring an APRS tracker, Digipeater or fill-in Digi is key to a successful participation in an APRS network. Example APRS path: <PRE> WIDE1-1, WIDE2-1 </PRE> The first number in a N-N type path is the total number of digi hops desired. The second one is the number of potential hops remaining as the packet is transmitted from a given digipeater. The following recommendations were obtained over time by reading many documents, absorbing third-party information from experienced operators of APRS nodes and first-hand experience of running an APRS station in mixed environments. {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Application</b> |style="background-color:#f2f2f2;"|<b>Path</b> |style="background-color:#f2f2f2;"|<b>Cycle-Time</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |Digipeater |WIDE2-1 |30m |repeats direct and appropriate other digi's |- |Fill-in Digi |WIDE1-1 |30m |repeats direct packets, does not repeat heard packets from other digi's or fill-in's |- |RX-only iGate |WIDE1-1 |30m |sends direct packets to the internet, does not send heard packets from other digi's or fill-in's |- |Mobile Tracker |WIDE1-1,WIDE2-1 |120s | |} Resources: [[File:WIDE1-1settings.txt]] http://www.aprs.net.au/vhf/national-2m-aprs-network http://wa8lmf.net/DigiPaths/index.htm 879618fbd5af398670fb1f992f14d32428a68880 File:Opamp-NE5532 highpass-pre-emp single.zip 6 408 1654 2014-10-30T21:54:05Z Admin 1 LTspice model for an audio HPF wikitext text/x-wiki LTspice model for an audio HPF 27baaae7fd4927d27c6171d992c318ac78a5e664 File:High-pass-ss.png 6 409 1655 2014-10-30T21:55:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NE5532.zip 6 410 1657 2014-10-30T21:58:34Z Admin 1 LTspice library for the NE5532 dual op-amp wikitext text/x-wiki LTspice library for the NE5532 dual op-amp ef58a27b58db41438f1cc6297357982098594a58 File:Opamp-NE5532 lowpass-de-emp single.zip 6 411 1658 2014-10-30T22:01:05Z Admin 1 LTspice LPF model wikitext text/x-wiki LTspice LPF model 8d7e54e2fe503515a10abe6cc5f171a67a0cd08d File:Low-pass-ss.png 6 413 1663 2014-10-30T22:19:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NE5532 HPF.jpg 6 414 1666 2014-10-31T05:29:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TNC-Pi comms-cable.jpg 6 415 1668 2014-11-01T00:13:35Z Admin 1 interface cable for IC-207H to TNC-Pi wikitext text/x-wiki interface cable for IC-207H to TNC-Pi c03e0cd7867dd0b77a0758f4cf5c2bd88145def5 File:LPF-HPF prototype1.jpg 6 416 1670 2014-11-02T02:58:14Z Admin 1 Prototype 1, the left the HPF, right the LPF wikitext text/x-wiki Prototype 1, the left the HPF, right the LPF c546cc484588881d42687f5be7905b439478b960 File:LPF-HPF prototype1 box.jpg 6 417 1671 2014-11-02T03:00:25Z Admin 1 filter circuit board mounted inside enclosure wikitext text/x-wiki filter circuit board mounted inside enclosure a517738e24704e2c7ef4fec9150a6c4bcfe33421 Opamp-filters 0 407 1673 1672 2014-11-02T03:05:28Z Admin 1 wikitext text/x-wiki Single-Supply (no negative voltage required) first-order (single-pole, 6dB/Octave, 20dB/Decade) audio filters. These filters are optimised to provide 6dB/Octave for the 1200Hz and 2200Hz tones required for Packet or APRS transmissions over FM. * Prototype #1 [[File:LPF-HPF prototype1.jpg|200px|thumb|none|veroboard with HPF (left) and LPF (right)]] [[File:LPF-HPF prototype1 box.jpg|200px|thumb|none|circuit board inside enclosure]] 2014-11-02 -- completed a first prototype housing both the LPF and HPF and ready for testing with the TNC-Pi and IC-207H. A dual-opamp package is used (NE5532) and since both designs work off a single-supply all grounds can be nicely connected together. Further testing will reveal if this design is up for the task. ==Low-Pass Filter (De-Emphasis)== [[File:Low-pass-ss.png|200px|thumb|none|LTspice trace and schematic of the filter in action]] LTspice LPF Model: [[File:Opamp-NE5532 lowpass-de-emp single.zip]] Ltspice NE5532 dual op-amp library: [[File:NE5532.zip]] ==High-Pass Filter (Pre-Emphasis)== [[File:NE5532 HPF.jpg|200px|thumb|none|veroboard prototype of the High-Pass filter]] [[File:High-pass-ss.png|200px|thumb|none|LTspice trace and schematic of the filter in action]] LTspice HPF Model: [[File:Opamp-NE5532 highpass-pre-emp single.zip]] LTspice NE5532 dual op-amp library: [[File:NE5532.zip]] d0aae1d1910828f2c0b4b9e94d1bafb556a3f1e6 File:Lilly pilly.jpg 6 418 1674 2014-11-02T07:45:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nerium oleander.jpg 6 419 1676 2014-11-02T07:49:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 ARS on Linux - Software Tools and utilities 0 422 1688 2014-11-08T09:43:11Z Admin 1 Admin moved page [[ARS on Linux - Software Tools and utilities]] to [[APRS on Linux - Software Tools and utilities]] wikitext text/x-wiki #REDIRECT [[APRS on Linux - Software Tools and utilities]] a65f5eb0cebf3c0dcaefb0206d13d7557c1ded75 APRS on Linux - Software Tools and utilities 0 421 1691 1690 2014-11-08T09:46:37Z Admin 1 wikitext text/x-wiki ==Sound== ==disk image backup and restore== [[Disk-Imaging]] ==updating the software== http://www.raspberrypi.org/documentation/raspbian/updating.md c34205990c6efdca265a09a9b42d5f8b0f06222c Rpi-aprs-asound.conf 0 423 1693 2014-11-08T10:07:40Z Admin 1 Created page with "<pre> /etc/asound.conf </pre> The following configuration file sets the first (device 0) sound card as the default. This can be changed to make another device the default dev..." wikitext text/x-wiki <pre> /etc/asound.conf </pre> The following configuration file sets the first (device 0) sound card as the default. This can be changed to make another device the default device, such as an external USB Sound Card. Another way to change the order of the numbering of a system with multiple sound cards is to edit /etc/modprobe.d/alsa-config... and override the numbering there. This configuration file is for a system that has the native raspberry pi (audio out only) sound card disabled by blacklisting the broadcom drivers and sets the external (and only) sound card as the default. Stricly speaking this is not required but since the process to get aprs going is still in a transitional process we will continue to use this for now. <pre> pcm.!default { type asym playback.pcm { type plug slave.pcm "hw:0,0" } capture.pcm { type plug slave.pcm "hw:0,0" } } </pre> If you wish to retain the RPi on-board sound card function you could update hw:0,0 to hw:1,0 to make the external sound card the default but you will have to make sure the order of these cards is correct. dd5ce232b8149a473c2e91d4dab5dbe84bad3154 Rpi-aprs-cmdline.txt 0 424 1694 2014-11-08T10:14:30Z Admin 1 Created page with "<pre> /boot/cmdline.txt </pre> The file cmdline.txt in the /boot directory can configure additional TTY's. In case the serial port of the TNC-Pi board is used it is a require..." wikitext text/x-wiki <pre> /boot/cmdline.txt </pre> The file cmdline.txt in the /boot directory can configure additional TTY's. In case the serial port of the TNC-Pi board is used it is a requirement to remove some of the tty settings in this file. The original Raspberry Pi /boot/cmdline.txt file contains a single line with the following arguments: <pre> dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait </pre> To use the TNC-Pi board, take out the following two arguments: * console=ttyAMA0,115200 * kgdboc=ttyAMA0,115200 New config line: <pre> dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait </pre> c9d2a9a401af11260a3e18476e843fee15fef53b Rpi-aprs-axports 0 425 1697 1696 2014-11-08T10:29:29Z Admin 1 wikitext text/x-wiki <pre> /etc/ax25/axports </pre> The axports file configures the link between an AX.25 interface and the callsign it's working for. <pre> # /etc/ax25/axports # # The format of this file is: # # name callsign speed paclen window description # sm0 VK2HAQ-1 1200 255 7 VHF APRS (1200 bps) </pre> The first column [name] (here 'sm0', without /dev/) needs to match the system's interface name: Example: <pre> root@aprs:/etc# ifconfig sm0 sm0 Link encap:AMPR AX.25 HWaddr VK2HAQ-1 inet addr:44.128.0.2 Bcast:44.128.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:256 Metric:1 RX packets:113 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:8662 (8.4 KiB) TX bytes:0 (0.0 B) root@aprs:/etc# </pre> The second column [callsign] (here 'VK2HAQ-1') needs to match the '$mycall' variable in /etc/aprx.conf: Example: <pre> <interface> ax25-device $mycall tx-ok false # transmitter enable defaults to false #telem-to-is false # set to 'false' to disable </interface> </pre> 2dbb9f9fa7c624bd8e53fae770ee00700ee6d615 Rpi-aprs-CM106-sound-settings 0 427 1704 1702 2014-11-08T10:53:41Z Admin 1 wikitext text/x-wiki Several methods exist to load and save sound card settings under linux. Since I wanted a non-gui method of setting the sound card's properties I found that the asound tool does exactly that. The nameing of the various controls and registers will probably be different for every sound card so check with 'amixer controls' what those registers are called before running this script. [[File:Cmedia-CM106-USB-soundcard.jpg|200px|thumb|none|CMedia CM106 USB Sound Card]] <pre> #!/bin/sh # pre-sets sound device mixer controls # find out which controls are available by issuing 'amixer controls' ACTL=/usr/sbin/alsactl AMIX=/usr/bin/amixer HWDEV=0 #load some defaults #$ACTL -f /etc/asound.state restore # Set the default recording channel $AMIX -c $HWDEV sset 'PCM Capture Source' 'Mixer' # Set the input level for PCM to 80%: $AMIX -c $HWDEV set PCM 80% # Set the input level for LINE to 0%: $AMIX -c $HWDEV set Line 0% # Set the playback level for LINE to 55%: $AMIX -c $HWDEV set Line 55% # Unmute the Line playback $AMIX -c $HWDEV set Line unmute # set all playback levels to 0% except the Front-Left and Front-Right channels (10%) $AMIX cset numid=7 38,38,0,0,0,0,0,0 # force loading of these settings as otherwise it takes about 3 minutes.. sleep 5 /usr/bin/alsamixer > /dev/null 2>&1 & sleep 5 /usr/bin/killall alsamixer > /dev/null 2>&1 </pre> Please note that the volume levels when not listed in per cent they are not 0 - 100 or 0 - 255. Check the 'amixer controls' output for this. 3380c499d7d0440158cdd23f8976460680df96d5 Rpi-aprs-aprx.conf 0 428 1705 2014-11-08T11:00:17Z Admin 1 Created page with "<pre> /etc/aprx.conf </pre> Aprx is a Linux based APRS client with full digipeater capabilities. The config below is for a Receive-(to APRSIS)-only iGate can can be tweaked ..." wikitext text/x-wiki <pre> /etc/aprx.conf </pre> Aprx is a Linux based APRS client with full digipeater capabilities. The config below is for a Receive-(to APRSIS)-only iGate can can be tweaked for full digipeater capabilities. Read the extensive manual for aprx for full details. <pre> # -- global variables -- mycall VK2HAQ-1 myloc lat 3256.14S lon 15137.75E # -- APRS Internet System -- # use appropriate passcode for your station <aprsis> passcode -1 server aunz.aprs2.net </aprsis> # -- program and packets logging -- <logging> pidfile /var/run/aprx.pid rflog /dev/shm/aprx-rf.log aprxlog /dev/shm/aprx.log dprslog /var/log/aprx/dprs.log </logging> # -- interfaces -- <interface> ax25-device $mycall tx-ok false # transmitter enable defaults to false </interface> # -- beacon -- <beacon> beaconmode aprsis cycle-size 20m beacon symbol "R&" $myloc comment "Rx-only iGate" </beacon> </pre> 58833a3c425be9afed7aaef86689024a515fbb08 Rpi-aprs-soundmodem.conf 0 426 1706 1700 2014-11-08T11:01:54Z Admin 1 wikitext text/x-wiki <pre> /etc/ax25/soundmodem.conf </pre> Soundmodem is a technique to use an ordinary sound card as an analogue-to-digital converter like a TNC does. <pre> <?xml version="1.0"?> <modem> <configuration name="AX25"> <chaccess txdelay="1000" slottime="100" ppersist="40" fulldup="0" txtail="100"/> <audio type="alsa" device="plughw:0,0" halfdup="1" capturechannelmode="Mono"/> <ptt file="none" gpio="0" hamlib_model="" hamlib_params=""/> <channel name="sm0"> <mod mode="afsk" bps="1200" f0="1200" f1="2200" diffenc="1" inlv="8" fec="1" tunelen="32" synclen="32"/> <demod mode="afsk" bps="1200" f0="1200" f1="2200" diffdec="1" inlv="8" fec="3" mintune="16" minsync="16"/> <pkt mode="MKISS" ifname="sm0" hwaddr="VK2HAQ-1" ip="44.128.0.2" netmask="255.255.255.0" broadcast="44.128.0.255" file="/dev/soundmodem0" unlink="1"/> </channel> </configuration> </modem> </pre> Noteworthy in this file are the following parameters: * txdelay -- set this to be long enough for the radio to open on transmit (default is 250ms) * plughw:0,0 -- points to the first sound card (1,0 would point to the second), make sure the order is configured properly (see here (page missing)) * ifname -- this needs to match the network interface and is also referenced in [[Rpi-aprs-axports]] * hwaddr -- set to the callsign (including the SSID) as seen in [[Rpi-aprs-axports]] and [[Rpi-aprs-aprx.conf]] * ip, broadcast -- use same network settings when starting [[Rpi-aprs-soundmodem]] * file -- points to the /dev/soundmodem character device, even though the system will not show it in /dev (do not use the sm0 interface) 308ddae82f25fd2f5ef937948bc1f58075f32a99 Rpi-aprs-soundmodem 0 429 1708 1707 2014-11-08T11:08:56Z Admin 1 wikitext text/x-wiki The following script can be used to start the soundmodem service. Please note that the network settings and interface name must match those in [[Rpi-aprs-soundmodem.conf]] and [[Rpi-aprs-axports]] <pre> #!/bin/sh # required for using a USB Sound Card as a TNC /usr/bin/screen -S sm0 -m -d /usr/local/sbin/soundmodem sleep 2 route add -net 44.0.0.0 netmask 255.0.0.0 dev sm0 </pre> This command will run the soundmodem service in a detached 'screen' session for easy backgrounding. To open access to the screen session issue the command 'screen -r' (or screen -ls to find out what the name of the screen session is). It is not a requirement to run soundmodem in a screen so you can just as easily background it with an empersand. 4a215c274087233bd9416ad52528a3a175f1c6f3 File:Rpi-shutdown-monitor.zip 6 430 1715 2014-11-09T09:56:18Z Admin 1 python script, schematic and images wikitext text/x-wiki python script, schematic and images fe57e19673b451eb2c2e611e6e53a8ca26ef5d34 File:1wire-linear-topology.png 6 431 1720 2014-11-15T10:43:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0055-rs232-tempsensor 0 16 1723 1722 2014-11-15T10:49:39Z Admin 1 wikitext text/x-wiki ---- {{Infobox | name = 0055-rs232-tempsensor | image = [[File:IMG 20140426 084813.jpg|150px]] | imagecaption = Serial Tempsensor Board | author = Marcel Post | mcu = AVR ATtiny85 | initial_release_date = June 2011 | last_modified_date = April 2014 | pcb_layers = 1 | project_status = completed | category = [[Electronics]] }} DS1820 tempsensor via serial (or USB) <br> <br> ==Description== This project is an updated version of one of my earlier PIC-based serial port temperature sensor. The original PIC version only supported one sensor per data pin whereas this version uses the OneWire bus protocol to discover and read data from multiple sensors on a single bus line. Since more and more computers don't have a serial port anymore I designed an add-on board to fit a cheap and simple 9600bps USB-to-UART Bridge (based on the CP2102 chip). I found some complete boards on Ebay for just AUD $2.95. Best of all, under Linux they don't require any additional drivers. For Windows drivers are required though (see links section below). Once the code has been uploaded into the ATtiny85 it's simply a matter of attaching it to the serial port. Set up comms on the PC as 9600-8N1 (all flow control set to OFF). When a key is pressed the sensorboard will start querying all the sensors it finds on the OneWire bus and send out the acquired temperature back over serial. ==Timeline== * 2014-04-25 Added support for DS18B20 sensors as the older DS1820 and DS18S20 are end of life. * 2011-11-27 Ordered 3x PCB's with BatchPCB. Only after the boards have arrived, built up and tested I will post relevant firmware on this page. Until then! * November 2011 Finalised schematic and pcb design. Removed the on-board DS1820 as it was heating up too much from the ftdi chip to give accurate readings and added pads for a second pull-up resistor to cater for more devices on the line. * September 2011 Designing a circuit board for external production. Once the boards are complete you should see them appear on this page. * June 2011 created a first prototype version. Hooked up 4 sensors tought me that the 5k pull-up resisistor for the DS18S20 is not always enough. Perhaps because I used a long (about 6m flat-ribbon) cable to connect the sensors. I added another 5k pull-up resistor and put it parallel across the existing resistor and therefore halving the resistance to 2.5k. That made it behave as expected again. ==Schematic== The next step will be to design (have manufactured) a custom circuit board for this project. I have a few other projects that I would like to make PCB's for so I will continue with some other projects until I have several boards I can have manufactured all in one go. [[File:0055-sch-v1.0.JPG|thumb|none]] Download schematic as pdf: [[File:0055-sch-v1.0.pdf]] The current schematic ===Attaching multiple sensors=== Maxim has released Application Note 148, a tutorial which mentions several techniques for attaching multple sensors to a microcontroller. The easiest and most reliable method is a linear topology where all sensors are fed from the same line. [[File:1wire-linear-topology.png|300px|thumb|none]] More information here: Guidelines for Reliable Long Line 1-Wire Networks http://www.maximintegrated.com/en/app-notes/index.mvp/id/148 ===The Pull-Up resistor=== The DS1820 (DS18B20, DS18S20, DS1820) datasheet states a maximum current drain through parasitic power of 4mW. At 5V supply that means a pull-up resistor of 1.2k is as low as you can go. For short runs you should be fine with a 4.7k pull-up resistor. ==Circuit Board== [[File:0055-pcb-3d-v1.0.JPG|none]] The PCB layout [[File:0055-pcb-v1.0.JPG]] Gerbers: [[File:0055-gerbers-v1.0.zip]] Other boards I'm currently designing: [[Pending_PCB_manufacturing]] ==Software== Latest source code: [[File:0055-rs232-tempsensor v2.zip]] Version 1: [[Image:0055-rs232-tempsensor.zip]] [[Image:Mcu 0055 Rs232-tempsensor 2011-08-02.tar.gz]] * client-side polling software All this does is send out a CRLF over the serial port and then listens for any incoming replies on same serial port. For Windows: [[File:Gettemp vb-express-2005 V8.zip]] (grab the exe from the bin/Release/ folder) For Linux: [[File:Gettemps linux.tar.gz]] ==Release Notes== ==Gallery== This is a screenshot of the temperature graphs of some sensors around my house. They are all connected to a single board with about 15m of cable connecting them. [[File:Temps-week.png|none]] Here are some pictures of the prototype made on vero-board. A customised board will be designed at some stage. I will announce it here when that's ready. [[Image:0055-ser-temps-board top.JPG|none]] This is the top of the board. I'm using the Atmel ATtiny85 microcontroller for this. Adding a second resistor was a quick hack to lower the total resistance as I didn't get proper readings over 8m of flat ribbon cable with three sensors attached. The 6-pin female header strip fits directly over the serial-to-usb board. I also fitted one DS18S20 temperature sensor on-board but I noticed that the serial-to-usb chip is getting a little warm and it affects reading the correct ambient temperature. On the customised pcb I will remove this and only have the edge connector available for connecting temperature sensors. [[Image:0055-ser-temps-board bot.JPG|none]] This is the copper side of the board. As you can see there's very little to it. NOTE: This board has a USB connector on it. That was the original idea, but since the adding of the USB code was probably going to be too big to fit all in the memory of the t85 I decided to use an external USB-to-Serial converter board. [[Image:0055-ser-temps-board side.JPG|none]] Side view of just the add-on board. [[File:IMG 20140426 084813.jpg|none]] Custom PCB final layout. The serial-to-usb board was picked up cheaply from eBay. Here is a top-view of the board and it's main features. [[Image:CP2102.jpg|none]] This board just plugs in to a standard USB port and presents itself as a virtual COM-port. It has a fixed transmission speed of 9600bps which is more than adequate for our purposes with this project. [[Image:0055-ser-temps-board usb.JPG|none]] My add-on board upside-down on the serial-to-usb board. The thin strip of black insulation tape was put on to block the light of two bright LED's. ==External Links== http://www.atmel.com/avr/ Silicon Labs page on the CP2102 http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx Drivers: (locally hosted) [[Image:CP210x VCP Win XP S2K3 Vista 7.zip]] [[File:DS18S20.pdf]] a9c2c30782dcb8434c44e889737ed6db00112e8a Arduino 0 298 1724 1586 2014-11-19T03:59:13Z Admin 1 wikitext text/x-wiki Arduino code examples (The Arduino UNO and Duemilanove both use an Atmel AVR microcontroller). * [[PCA9535 IO expansion port]] * [[AD9850 wave generator]] * [[Midas-2x16-I2C-LCD]] 92c49d4dcba5034f912c29703ddd1ff973b65e24 File:Midas I2C LCD.zip 6 433 1726 2014-11-19T04:01:10Z Admin 1 arduino demo code with lcd library wikitext text/x-wiki arduino demo code with lcd library 0960b775eec2e53012dfdc4a3ce81872bfc68a5c File:Midas-I2C LCD.jpg 6 434 1728 2014-11-19T04:04:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MC21605GL6W-SPTLYI.png 6 435 1729 2014-11-19T04:06:06Z Admin 1 Product information as shown on the Farnell website (Nov 2014) wikitext text/x-wiki Product information as shown on the Farnell website (Nov 2014) 36f2c40110b425b7c029f85f15a6941ea088482e Midas-2x16-I2C-LCD 0 432 1730 1727 2014-11-19T04:06:38Z Admin 1 wikitext text/x-wiki MC21605GL6W-SPTLYI [[File:Midas-I2C LCD.jpg]] The LCD module receiving data over the I2C bus only. [[File:MC21605GL6W-SPTLYI.png]] Product information as shown on the Farnell website (Nov 2014) Arduino demo program including the ST7036 LCD library. [[File:Midas I2C LCD.zip]] 7402e48da4dfaa05971aee2168a29262d3e11d01 File:Tnc-pi detail.jpg 6 436 1731 2014-11-25T22:38:41Z Admin 1 TNC-Pi trimpots for output volume and TXDelay wikitext text/x-wiki TNC-Pi trimpots for output volume and TXDelay ea5b4fe17ba7b301bfa1ba6e4e7c1e77a2930037 Rpi-aprs-what-do-i-need 0 437 1733 2014-12-07T02:44:22Z Admin 1 Created page with " For a simple RPi-powered APRS station (not mentioning the radio) you would need: - Raspberry Pi - SDcard (4GB or more) - 5V Power supply to the raspberry pi (micro-usb conne..." wikitext text/x-wiki For a simple RPi-powered APRS station (not mentioning the radio) you would need: - Raspberry Pi - SDcard (4GB or more) - 5V Power supply to the raspberry pi (micro-usb connector) - Network connection (for iGating and/or getting accurate Internet time) Now, here are some of the options available: Raspberry Pi model choice: ------------------------------------- The Models A and A+ do not have an on-board Ethernet adapter. They can be used as stand-alone units just fine but the main issue is getting the time correct. One method is to use a WiFi adapter. These are fairly cheap but rely on a nearby WiFi network. It that network becomes unavailable the rpi will slowly drift in time. Once the network is present again it will just auto-sync with the Network Time Protocol (NTP) on the Internet. If the WiFi network is unavailable at start-up of the RPi it will default to 1 January 1970. One other option for timekeeping is to make use of an add-on module attached to the GPIO header pins on the RPi. At this stage I can think of two possible modules that could give the RPi accurate time: 1) a battery backed-up Real-time Clock (RTC) or 2) a GPS module. The RTC would need to be set either by an initial clock synced from the Internet over NTP or set manually from the command prompt in linux (may write a web-gui page for that at some stage). The benefit of the RTC is that it keeps the time even if the RPi is switched off. So you could bring the RPi to an location where there is no GPS signal and still have near-accurate time. Most RTC's are fairly accurate but they do drift. Once a week (or month) syncing over NTP would be nice. The second option, a GPS module would give you the most accurate time when a signal is available. It's like an Internet NTP connection. If none is available at startup, the RPi would live in 1970. From a power point of view I would think that the RTC would be more efficient than a GPS module but they're all down to only a few mA's. Testing and setup: ------------------------- Of course you may wish to see what the RPi is showing on screen and especially for debugging network connectivity it is easiest if you have an external monitor and keyboard available: - LCD monitor with DVI connector and cable. (or you could find one of those VGA to DVI adapters I got and use an old VGA monitor) - USB keyboard - USB mouse Even though none of these are required for normal operation of the APRS station they could make life a little easier. 5V power suppy to raspberry pi (micro usb): ---------------------------------------------------------- The RPi draws up to 700mA. Add to that any additional peripherals (WiFi adapter, Keyboard, Mouse, TNC-Pi, Realtime Clock) and you may run quickly over the maximum of 1A per usb port. In those cases it is recommended to use a Powered USB Hub. Several of these will allow 'backfeeding' to the RPi. Meaning, that you don't need a micro-usb connection to the RPi but the powered usb hub will just put the juice back in the RPi over the USB port it is connected to. Although this saves cables and power supplies it comes at a cost. The designers of the RPi have put quite a bit of effort in protecting the power input of the RPi and backfeeding it though USB will negate all of that. You are reliant on the powered usb hub's power supply and can only hope that it's equally well protected. SDCARD: ------------- The older RPi models A and B have a full size SDCARD slot, the newer A+ and B+ models have a micro-SD slot. Don't use those SD-to-micro-SD adapter cards, just get the right size for your board. When it comes to the operating system (Raspbian) I will be more than happy to flash the image onto it as my version will have the web-gui, the statistics and the maintenance scripts installed. For the die-hards I am happy to make the sources and scripts available, but I haven't written an installation guide for it. TNC ------- One thing I haven't mentioned yet is the TNC. At home I am running the software using a USB Soundcard as a TNC. This seems to work very well but I haven't finished testing yet. The sound card was purchased of eBay and was only $10 or so. I prefer this method as it does not involve any propietary 3rd party hardware. If you simply wish to be on-air before I have finished testing then the TNC-Pi from Coastal Chipworks is what Warren and Russell are using. These are the units that we have come to known over the last couple of months. The TNC-Pi uses a DB9 connector for which you will have to make up an interfacing cable. It's pretty simple with RX_Audio, TX_Audio, PTT and GND. Output levels from the TNC-Pi can be adjusted with a simple trimpot and the incoming signal may need to be adjusted on the radio side. RADIO --------- The UV-5R is not a 12V or a 5V device. It has VOX which is probably what you want to use but you may need to come up with a clean way of continuously powering it. I believe there are 'battery eliminator' packs available which just plug in the back like a battery but will accept power from 12V. This may be the easiest method of running at 12V. Apart from a decent antenna, that's pretty much it. 1f9e1a1d98cca80663e64f21445557a7fcff4b07 File:Pi-Model-A 2012.jpg 6 439 1736 2014-12-21T01:52:54Z Admin 1 Raspberry Pi Model A (2012) wikitext text/x-wiki Raspberry Pi Model A (2012) 5879838eff08c1b1aa1824c6d86a0d4d305e7011 File:Pi-Model-B 2012.jpg 6 440 1738 2014-12-21T01:54:33Z Admin 1 Raspberry Pi Model B (2012) wikitext text/x-wiki Raspberry Pi Model B (2012) eb60dce80ff3b52b192ff2739f9ca85cb011a8a5 File:Pi-Model-A+ 2014.jpg 6 441 1748 2014-12-21T02:21:59Z Admin 1 Raspberry Pi Model A+ v1.1 wikitext text/x-wiki Raspberry Pi Model A+ v1.1 be25bfa8809379e76b634b5d393b4c86c4688dcb File:Pi-Model-B+ 2014.jpg 6 442 1751 2014-12-21T02:27:48Z Admin 1 Raspberry Pi Model B+ v1.2 wikitext text/x-wiki Raspberry Pi Model B+ v1.2 154cee9d1f52f81eec1d0204a5636d7e1f2a959b File:Pi-Model-B 2011 rev1.jpg 6 443 1752 2014-12-21T02:34:28Z Admin 1 Raspberry Pi Model B Rev1 wikitext text/x-wiki Raspberry Pi Model B Rev1 743af05eeef8dce29a3d93ab4acbca0b7479a883 Raspberrypi-models-and-versions 0 438 1759 1758 2014-12-21T02:54:29Z Admin 1 wikitext text/x-wiki Here's an overview of the various Raspberry Pi models and versions (aka revisions). In February 2012 the Raspberry Pi Foundation released Model A and Model B {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Model A</b> |style="background-color:#f2f2f2;"|<b>Revision</b> |style="background-color:#f2f2f2;"|<b>Release date</b> |style="background-color:#f2f2f2;"|<b>Comments</b> |style="background-color:#f2f2f2;"| |style="background-color:#f2f2f2;"|<b>Model B</b> |style="background-color:#f2f2f2;"|<b>Revision</b> |style="background-color:#f2f2f2;"|<b>Release date</b> |style="background-color:#f2f2f2;"|<b>Comments</b> |- | | | | | |[[File:Pi-Model-B 2011 rev1.jpg|200px|thumb|none|Raspberry Pi Model B rev1]] |Rev1 |Feb 2012 |With Ethernet 512MB RAM 2x USB No Mounting holes |- |[[File:Pi-Model-A 2012.jpg|200px|thumb|none|Raspberry Pi Model A]] |Rev1 |Feb 2012 |Based on Model B Rev2 P5 Header | |[[File:Pi-Model-B 2012.jpg|200px|thumb|none|Raspberry Pi Model B]] |Rev2 |Feb 2013 |P5 Header |- |[[File:Pi-Model-A+ 2014.jpg|200px|thumb|none|Raspberry Pi Model A+ v1.1]] |Rev1.1 |Nov 2014 |40 Pin GPIO Composite video now in audio jack | |[[File:Pi-Model-B+ 2014.jpg|200px|thumb|none|Raspberry Pi Model B+ v1.2]] |Rev1.2 |Jul 2014 |40 Pin GPIO Composite video now in audio jack 4x USB |} 4cda34db58e3cdac8fa60591d6ed38504dc0ce9d File:UV5R-PTT-pinout.jpg 6 445 1770 2015-01-01T23:39:02Z Admin 1 RPi GPIO PTT, logic inverter and connector pinout for Baofeng UV-5R wikitext text/x-wiki RPi GPIO PTT, logic inverter and connector pinout for Baofeng UV-5R 257f2c2c472e7b6c65e17c4b4e4b3ee39da935be File:P2AT-PTT-pinout.jpg 6 446 1772 2015-01-01T23:44:02Z Admin 1 RPi GPIO PTT, logic inverter and connector pinout for Icom IC-P2AT wikitext text/x-wiki RPi GPIO PTT, logic inverter and connector pinout for Icom IC-P2AT ef38f2ca92c1d24b44ba58d3e2f08c0643a6c071 File:IC-207H.jpg 6 447 1779 2015-01-04T02:05:34Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:IC-207H rear.jpg 6 449 1781 2015-01-04T02:09:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TM-211A output-volume.jpg 6 450 1785 2015-01-04T02:40:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TM-211A.jpg 6 452 1787 2015-01-04T02:47:37Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TM-211A back.jpg 6 453 1791 2015-01-04T02:53:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TM-211A-mic-connector-pinout.jpg 6 454 1793 2015-01-04T03:07:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TM-211A TNC-Pi comms-cable.jpg 6 455 1799 2015-01-04T05:25:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Kenwood TM-211A 0 451 1800 1796 2015-01-04T05:27:11Z Admin 1 wikitext text/x-wiki Kenwood TM-211A [[File:TM-211A.jpg|thumb|none|200px|Kenwood TM-211A]] [[File:TM-211A back.jpg]] APRS / TNC connection notes: * radio has no dedicated port for digital modes * 3.5mm plug (mono) for Audio-Out at the back (see output volume picture) Output volume (peak-to-peak) measured on audio output socket using locally heard APRS stations as source. [[File:TM-211A output-volume.jpg|thumb|none|400px]] Pinout of the rear microphone connector. [[File:TM-211A-mic-connector-pinout.jpg|thumb|none|400px]] [[File:TM-211A TNC-Pi comms-cable.jpg|thumb|none|400px|TNC-Pi interface cable]] f4df971ba06d03523e17fd73657efe7292ca9f79 File:TNC-Pi.jpg 6 457 1803 2015-01-04T05:33:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TNC-Pi R7.jpg 6 458 1805 2015-01-04T05:41:05Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TNC-Pi R6.jpg 6 459 1807 2015-01-04T05:45:27Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Icom IC-207H 0 448 1810 1809 2015-01-04T07:16:12Z Admin 1 wikitext text/x-wiki Icom IC-207H [[File:IC-207H.jpg]] [[File:IC-207H rear.jpg]] APRS / TNC connection Notes: * Digital port at the back of the radio allows for fixed-output-volume (measured at 270mV Peak-to-Peak) * Digital port is 6-pin mini-Din connector * maximum input volume 400mV Peak-to-Peak * microphone must be disconnected from front as it interferes with TX-Audio from digital port * Transmit and Receive circuits do not provide Pre- and De-emphasis ==data port== The radio's data port caters for 1200 baud and 9600 baud connections. The maximum Audio Input level according to the user manual is 400mV Peak-to-Peak The radio's constant receive audio output level (independent of front audio volume knob) is 270mV Peak-to-Peak == TNC interface cable == To use this radio as an APRS station the following cable was custom-made to interface to the TNC-Pi [[File:TNC-Pi comms-cable.jpg|thumb|none|400px|TNC interface Cable made for the IC-207H]] 05785149599fd1368155740663c76d96ba245a30 File:TNC-Pi radio header.png 6 460 1813 2015-01-04T07:39:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:RPi-PCB top.jpg 6 461 1816 2015-01-04T09:10:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:RPi-PCB bottom.jpg 6 462 1817 2015-01-04T09:11:36Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MX614P.jpg 6 464 1819 2015-01-04T09:14:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Wayne-Kerr Automatic-Modulation-Meter AMM-257.JPG 6 465 1823 2015-01-04T09:41:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Aprs-on-rpi 0 392 1825 1824 2015-01-04T09:43:30Z Admin 1 wikitext text/x-wiki This is the web log for the APRS on Raspberry Pi project. All this came about when some club members asked me if they could replace their Windows XP box running UI-View32 with a Raspberry Pi computer. [[File:Rpi.jpg|200px|thumb|none|Raspberry Pi Single-Board computer, Model B]] Project timeline: 31 October 2013 This is pretty much when things started. Initially I made an inventory of the various bits of APRS software available on the RPi and it all looked promising. I used a Raspbian image as the basis and added some tools like remote access software to the X-Server (using X11VNC). 4 November 2013 The software on the RPi will either be Xastir or aprx. Exchanged some information about which radios to use and pinout diagram for the Kenwood D710 back connector. Managed to configure the soundmodem software to talk to the sound card. But there is a problem. Although it produces what sounds like APRS packets it is very noisy, the signals are not clean and will most likely be corrupted. [[File:Cmedia-CM106-USB-soundcard.jpg|200px|thumb|none|CMedia CM106 USB Sound Card]] The USB Sound Card I am intending to use is the CMedia CM106. It is an external USB device and retails for about $10 on eBay. This card works reasonably well for an SDR (software defined radio) project I played around with some months earlier. 6 November 2013 Reading up on pre-emphasis and de-emphasis and how it affects the probability of successfully decoding packets at the other end. Best write-up is here: http://www.febo.com/packet/layer-one/transmit.html To satisfy my curiosity, I managed to get an SDR dongle to work under Windows 7 using SDRSharp to produce the audio heard on 145.175 (the Australian National APRS frequency) and feed it using a 'virtual audio cable' to AFSK1200 (QTMM program). I could see several successfully decoded packets flying by! 12 November 2013 After many hours of configuration changes I am still not able to produce clean-sounding APRS packets. I tried several USB modems and they all produce packets with enormous distortion. I compiled the software from source and tried different sampling rates. All to no avail. The output volume is way too loud and distorted and I can't seem to control its behaviour. Thinking of leaving the soundmodem route for now and focus on RS-232 enabled TNC devices. 18 November 2013 Found some reasonably priced TNC's that have built-in RS-232 ports (some using FTDI TTL-to-UART). The Argent Data OpenTracker-USB and the TNC-Pi (a board, custom made to be placed on top of a Raspberry Pi). [[File:Tnc-pi.jpg|200px|thumb|none|TNC-Pi board]] [[File:Otusb.jpg|200px|thumb|none|OpenTracker USB TNC]] 21 November 2013 Ordered myself the Argent Data OpenTracker-USB TNC. At $45 I don't mind the expense as it will probably enable me to get the aprs working quickly and can then focus on getting the software side of things in order. 20 December 2013 With the newly received OpenTracker-USB TNC I was able to make up a simple interface cable and configure aprx on the RPi. Success! It was decoding APRS packets from the radio in a short matter of time. The receiving side can be considered solved using this technique. The OpenTracker-USB can also be used for generating packets to be sent to the radio. For my setup this requires an additional circuit since my handheld radio uses a combined line for Microphone signals and PTT and the radio does not feature a VOX (voice operated switch). Most newer handhelds will just have a VOX, which will key the radio into transmit when it hears a packet from the TNC to be transmitted. Most base station radios however will just have separate PTT and Audio-In lines making it fairly easy to use the OpenTracker-USB for transmit. With the success of Receive-only APRS decoding under our belt and the summer holidays upon us it is time to reconvene in the new year.. Edit: The opentracker USB has circuitry on-board that allows for easy interfacing to Handheld Radios that use the shared PTT/MIC/Bias-Voltage technique. In the end I stopped using the Opentracker and moved back to the successfully working USB Sound Card technique and using a [[GPIO pin on the RPi to trigger PTT]]. 22 March 2014 Keeping the project alive by refining the RPi software a bit and working on a web-interface to the various controls of the software. 13 July 2014 I've been distracted by other projects that are somewhat related but aren't finished. The idea was to run my aprs-rpi igate experiment off batteries in the shed but I noticed that I didn't have full control over when the battery would need recharging. To that effect I started designing a voltage-datalogger and got stuck in pcb design, FET selection and working with circuit simulation software LTspice. Then I got distracted again by updating my satellite tracking software for Android and now I'm looking at putting together a skew-planar circular polarised antenna for working the satellites. Trying to source sturdy metal wire for the elements is in full swing. I also finished the transfer of my home server from a (small) SheevaPlug to the (even smaller) raspberry pi. Now that that is running nicely and the financial year has been dealt with I got going again with the aprs-rpi project. A second rpi (the model A version without ethernet and only 256MB memory) is now talking fine to the OpenTracker-USB TNC and I'm now at a stage where the little web-interface I wrote is able to start/stop the services, update configuration and show some logs. 16 July 2014 Aprx version 2.08 (latest version) installed on the APRS-RPi base image. Demonstrated the receive-only capabilities to fellow club members and the web interface (although primitive) is working well. 18 July 2014 Wrote a web page that shows the 'dmesg' log to reveal what the kernel says about inserted devices such as an RS-232 TTL-UART adapter that is used as the serial port for the OpenTracker-USB. Having this information on a webpage makes configuration much easier and doesn't require the end user to know much about Linux internals. 29 July 2014 In another session at the radio club to configure and demonstrate APRS on the RPi I somehow damaged my OpenTracker-USB. It is running very hot when powered on and no lights are blinking. This is unexpected and throws a spanner in the works.. I contacted the manufacturer Argent Data in the USA and the owner agreed to have a look at repairing it. I sent it by air mail a few days later. 31 July 2014 Without my OpenTracker TNC I got back to getting the soundmodem method to work. Lo and behold, after a few more tweaks I was finally able to get a generic USB sound card to work as a modem. Combined with a program called 'Direwolf' i can now reliably decode (and probably send, but I haven't connected PTT nor audio-out to my handheld transceiver) aprs packets. The Direwolf software looks very similar to aprx and also works off a single config file. I was also able to get the SDR dongle to work on Linux. Using the Direwolf application I could decodes APRS packets. It did lock up a few times though. Not sure what causes it. Even though it can be made to work I will not spend too much time and effort to this method as the SDR dongle is not able to transmit signals. Perhaps ideal for an iGate but not for setting up a full rx/tx digipeater. Got some feedback from the fellow hams who are interested in this project that they are happy to purchase the TNC-Pi board. This would be another easy route to take as it just connects to the Raspberry Pi GPIO header pins and it has almost everything on there to set up a digipeater with few extra components. 3 August 2014 Almost finished working on putting the RPi, the radio and everything required to run an aprs system inside a metal toolbox. This way it is all neatly contained in a single unit and easy to transport. Also started re-designing the web interface to make it look a bit more coherent. [[File:ACP-webgui.png|200px|thumb|none|APRS Control Panel, version 2]] 3 September 2014 For my 'APRS toolbox' setup I will be using the soundmodem (with USB sound card) setup. Since the radio I wish to use is a 2m handheld (IC-P2AT) and it doesn't have separate PTT and Audio-in lines it needs an additional circuit to use the audio coming out of the sound card to both key the radio into transmit and add the audio signal on top of this line. This technice is often used in handheld radios. I have started gathering some simple VOX (voice operated switch) schematics and attempted to combine them to the Audio-in line. 15 September 2014 My repaired OpenTracker USB arrived in the mail today. It looks like the 4-sided (quad flat package) microcontroller chip has been replaced. I might end up using this tracker in my car or for other purposes as I am fairly confident the soundmodem technique will be a winner. 23 September 2014 The TNC-Pi has arrived at one of the club's members and it is visible from the RPi. We ran out of time today to fully configure it all up but it looks like a neat solution and seems to have all the smarts on-board. There were some errors when accessing the TNC-Pi board from the RPi, but this may be just a simple configuration error. While we were there my receive-only APRS Toolbox was successfully decoding packets all throughout the evening. We also concluded that the 'missing link' is an interface cable that goes between the radio (6-pin mini-din female at the back of an Icom IC-207H) and the TNC-Pi (RS-232 female connector). [[File:IC-207H front.jpg|200px|thumb|none|Icom IC-207H]] The radio that will be used to set up a dedicated digipeater using the TNC-Pi board on a Raspberry pi. 24 September 2014 Added a webpage with details on how to set up a simple reboot/shutdown button for the Raspberry Pi. Full details, schematics and code here: http://www.marcelpost.com/wiki/index.php/Rpi-shutdown-button 30 September 2014 Gathered at the radio club again and made up the interface connecting cable for the TNC-Pi to the IC-207H radio. [[File:IC-207H-to-TNC-Pi cable.jpg|200px|thumb|none|Interface cable for IC-207H]] [[File:TNC-Pi comms-cable.jpg|200px|thumb|none|Radio and TNC cable pinout]] After we fixed up the small configuration error in aprx.conf (it was using the serial port to talk to the TNC-Pi instead of the AX.25 port) the TNC-Pi was able to successfully receive and send packets. Success! All that needs to be done now is to calibrate the TNC's transmit level so that the radio's limiter doesn't kick in for the 2200Hz tones (1200Hz tones will be fine then too). I plan to use another handheld receiver (Baofeng UV-5R) with its audio going to a small digital oscilloscope (XMEGA Xprotolab from GaboTronics). 07 October 2014 Attempt to calibrate TNC-Pi for proper audio TX levels. Looks like the IC-207H (as well as Alinco DR-135, Kenwood TS2000 and D700) does not have a pre-emphasis network. The following website deals with setting the audio levels by using a low tone that is generated on the TNC-X (common ancestor of the TNC-Pi). http://fettechnologies.com/tncx.html Made a high-pass filter using an opamp that can be used for the Pre-Emphasis. It seems to respond well but it hasn't been tested with live data yet. I also worked out a design for a low-pass filter which is for the De-Emphasis. More information on the designs and LTspice models here: [[Opamp-filters]]. 04 November 2014 Tested out the new opamp HPF/LPF circuit. The IC-207H was able to send out APRS data which was successfully decoded on another station. Further testing needs to be done as the overall audio-out level seems fairly low (around 50% volume level) when compared with live traffic (around 70% volume level) from our local digipeater. The TXDELAY option in /etc/ax25/soundmodem.conf worked well to open the radio before sending data. Not sure yet of the influence of the trimpot onboard the TNC-Pi to also tune the TX Delay. Some other information relates to the APRS digipeater settings themselves. It turns out that a fill-in Digi should have its PATH setting to WIDE1-1 and nothing more. This was confirmed by various documents including one from Bob Bruninga himeself. See my dedicated page on the APRS Path settings here: [[APRS-path]]. There was also the request to find out what SSID could be used for testing and troubleshooting. The list of possible SSID's recommends to use -6 as the SSID for 'special events' including tests. Several web frontend improvements were also made but these haven't been rolled out yet to a production-image of the Raspbian SDcard. It is planned for our next get-together to roll out the latest version to our testing setup. 18 November 2014 Yesterday’s evening at the club was another one of those ‘two steps forward one step back’ events. The test setup ran successfully with the new Raspbian version, also running the new Raspberry Pi firmware and the new APRS web gui. With some minor tweaks it all worked well. I’ve started giving version numbers to the gui to keep track of who’s running what. The version Warren is running is v0.02. This version fixes some bugs, adds some control to which services are running at system startup and brings you back to the configuration page after hitting ‘save’ when editing a configuration file. I’ve also identified some more areas where things can be improved. With the oscilloscope we were able to measure the range of the output volume of the TNC-Pi board when transmitting a packet. Trimpot R7 (10k, near the DB9 connector sets the output volume from 0V (turned fully counter clockwise) to 700mV (turned fully clockwise). Halfway is around 325mV so the trimpot is Linear. Using the scope (and the tone generated when the TNC-Pi is in receive mode) we set the output volume of the TNC-Pi to 400mV PtP. The TNC-Pi has no pre-emphasis so the 1200/2200Hz tones will be at the same level. [[File:Tnc-pi detail.jpg|200px|thumb|none|TNC-Pi trimpots]] This means that the TNC-Pi should now be properly adjusted for the IC-207H and drives the TX audio signal (with or without the opamp filter pre-emphasis circuit) to the radio’s maximum allowable input level of 400mV PtP. We still need to confirm this with another radio to make sure it's not overdriving anything. Next up we wanted to have a closer look at the TXdelay settings. The AX.25 suite of programs however has a program called kissparms. This should be the right tool to influence the AX.25 network interface parameters but trying out various settings did not reveal any audible change in behaviour. This calls for more investigation and it will be the main point on the agenda until this is understood and resolved. 25 November 2014 Another productive evening at the club last night. With only a few tweaks the latest web-gui version is now properly showing the RX and TX packet counters. We also found out that changing the SSID (the bit after the callsign) needs to be changed in both /etc/aprx.conf and /etc/ax25/axports. Once we did that all successfully received packets (as seen on the interface) were visible in the aprx-rf.log on the web gui front page. We also experimented with the de-emphasis filter as earlier field tests never succeeded in receiving or decoding any packets. The same was confirmed at the club. With a little bypass cable the de-emphasis filter was taken out of the loop and received packets started rolling in. The conclusion can only be that the de-emphasis filter needs a little more work.. Right now the radio is not applying any de-emphasis but apparently the TNC-Pi is tolerant of these signals. By the end of the evening after running solidly for about 50 minutes we could see that over 90 packets were successfully received, the log was showing the contents of the decoded packets on the screen and the graphs showing the number packets per minute and Bytes per second were updating nicely. The next step here is to hook up the unit in the field and after it has confirmed proper working to configure it as a fill-in digi. We also measured the output level on the data port of the IC-207H for received packets. We hooked it up to the cro and noticed that most received packets were around 270mV PtP. It is unclear yet whether this is the maximum range as we don't know the drive level of these packets but it gives us a ballpark figure to work with for redesigning the de-emphasis filter. We had access to an FM Deviation Meter and testing with a handheld transmitting a DTMF signal it clearly showed the deviation. [[File:Wayne-Kerr Automatic-Modulation-Meter AMM-257.JPG]] After setting up the RPi and TNC-Pi we then tried to measure the deviation of the aprs packets. Well, wasn’t that interesting.. It turns out that the deviation meter needs some time to properly lock on to the signal before it can measure the deviation. The transmitted packets however were not long enough for the deviation meter to lock on! We tried to increase the length of the packets but could not find an easy way to do this. Apart from using a different technique altogether I can think of two other things we could still try. Firstly, the packet length could be made longer by increasing the ident text string (e.g. change ‘RX-Only iGate’ to ‘RX-Only iGate testing123 testing123 testing123, etc..’). Perhaps with a lot more characters the packet will scale up and be long enough for the deviation meter to properly lock on to the signal. Secondly, we could use the 487Hz tone that is generated on the TNC-Pi board as the reference point. This tone should have 775Hz deviation. 2 December 2014 We increased the contents of the text-field that is shown as a comment when a beacon packet is sent (e.g. ‘Rx-Only iGate’). We added about 100 extra characters and it made the duration of the packet transmission just long enough for the deviation meter to just get a lock on the signal. On receiving the signal the deviation meter would fully deflect the needle and then slowly come back to point to the real value on the scale. It took several attempts and after seeing several packets in a row bring the needle to around 3kHz we agreed that the deviation was within an acceptable range. The next step was to configure aprx to be a Fill-in Digipeater listening with the WIDE1-1 alias. After a quick google search and hitting the aprx google groups site we tested a configuration that seemed to work pretty much at the first try. We watched the aprx-rf.log for any locally received packets from nearby digipeaters (VK2RTZ, VK2XPT, VK2RTM, VK2RPM, VK2RHR, VK2UNI) and confirmed that none we re-transmitted by our station. We then forced some beacons to be transmitted from a local car’s tracker and they all were heard directly and successfully retransmitted. We also had someone trigger a beacon from the other side of nearby Mount Sugarloaf and although we could hear their packet being re-transmitted from the WIDE2 digi VK2ATZ on Mt Sugarloaf it wasn’t heard directly by us and was therefore not re-transmitted by our station when we heard the WIDE2 repeats. For as far as our knowledge goes this seems to confirm that the Fill-in Digi is listening properly to locally heard direct packets and doesn’t re-transmit any packets from other Digi’s (either other Fill-ins or normal Wide Digi’s). One of the guys had to leave early and switched on the tracker in his car when he left. We could see several of his directs come through our station and they were re-transmitted. When he got further and further and out of range he was starting to be picked up by the WIDE2 digi VK2RTZ. There were a few more spots where we could hear him direct until he was over the hill and only heard by VK2RTZ. This real-world scenario where our station was able to ‘fill-in’ the holes demonstrated the value of a Fill-in Digi. At the end of the evening one of they guys took the station back to his QTH and connected it all up running his first night as a Fill-in Digi on a Raspberry Pi. He has been running his fill-in digi ever since and it has clocked up thousands of packets and seems to be running perfectly. This pretty much concludes the blog on this particular station's setup. It has been a great learning curve and the end result is a fully working Fill-in digi that is based on affordable hardware and runs at low power (about 6W when not transmitting). For more practical information on setting up an APRS station on different hardware, please check the [[Aprs]] page on this site. TODO (some day): * Re-design the low-pass (de-emphasis) filter for radios that have 'flat' audio * Run WA8LMF APRS test CD to confirm proper RX, see http://www.tapr.org/pipermail/aprssig/2005-April/005545.html * Tune aprx Digipeater settings and filtering * Further web frontend improvements * Realtime Clock / NTP / GPS 077cf28096b9fe88b0d48df0d66b5c25ddedfc7e File:Yaesu-FT-1802M.jpg 6 467 1828 2015-01-04T10:13:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Configuring APRS on Linux 0 391 1831 1830 2015-01-05T02:25:00Z Admin 1 wikitext text/x-wiki Running APRS on Linux can be done in a few ways. The short version can be found here: [[Rpi-aprs-what-do-i-need]] If we assume a setup that can: * receive packets that come in from over the the air * receive packets that come in from over a network adapter (e.g. connected to the Internet) * transmit packets over the air (i.e. to 'rf', radio frequency) * transmit packets to a network adapter (e.g. to the Internet) ..then the following components are identified ==A device to receive the packets== * a ham radio (e.g. base station or handheld transceiver) * SDR (software defined radio) * a Network Adapter (e.g. from the APRS-IS network on the Internet) ==A device to convert analogue (audible) signals to some form of digital signals== (not required for packets originating from a network adapter) * TNC (Terminal Node Controller) * some fancier ham radios have a built in converter that just spits out RS-232 * a computer sound card (either in a laptop, or a dedicated PCI or USB device) * SDR (software defined radio) ==Protocol Software that converts the digital signals to APRS packets== * TNC (e.g. reads from an AX.25 interface or directly from a serial or USB port) * soundmodem (converts soundcard signals to the AX.25 protocol) ==Application Software that processes the packets based on their information== Most of these programs can be configured to listen to serial devices or network adapters, including the AX.25 interfaces. * TNC (Terminal Node Controller) * APRS client (aprx, xastir, direwolf, UI-View, etc..) One of my first experiences with APRS was to configure a receive and transmit station (a digipeater) using: * a basic USB sound card * a 2-metre handheld transceiver (Icom IC-P2AT, maximum 5 Watts output power) * a Raspberry Pi 'single-board-computer' I have created a dedicated page for this project: [[aprs-on-rpi]] Below is a collection of configuration files that have been known to work: [[rpi-aprs-asound.conf]] [[rpi-aprs-cmdline.txt]] [[rpi-aprs-axports]] [[rpi-aprs-soundmodem.conf]] [[rpi-aprs-aprx.conf]] [[rpi-aprs-CM106-sound-settings]] 1f24249b50c093340fa222c559717567274189ff MIC-E 0 404 1834 1833 2015-01-05T02:59:34Z Admin 1 wikitext text/x-wiki ==MIC-E or (Mic-Encoder) DATA FORMAT== The mic-encoder (as developed by TAPR) is a device that sends a 1/3second APRS data burst at the end of a voice transmission. It is like the "roger beep" when you release the PTT button. Mic-E was originally intended to encode your postition when you used the PTT on your hand mike, but the APRS world has changed quite a bit since then. Mic-E is a method of encoding an APRS position report that was designed to make the packets very short so they could be reliably sent at the beginning or end of a voice transmission like MDC data in the commercial radio world. In Mic-E, the latitude along with some other data is encoded into the Destination Address field (7 bytes) of the AX.25 UI frame and the longitude along with some more data is encoded into the Information field (as short as 9 bytes) of the UI frame. This encoding uses all of the printable 7-bit ASCII characters instead of just 0-9, A-Z, and a-z. This made the packets much shorter than the "long-form" position reports using clear text that was common in APRS at the time. The Mic-E specification includes a 3-bit message identifier that is encoded into the first three bits of the Destination Address field along with the latitude. The standard message identifiers are M0 (Off Duty) to M6 (Priority), C0 (Custom 0) to C6 (Custom 6), and Emergency. The intent was that a group might agree to the meaning of the six custom message types and use them as they saw fit. For whatever reason, Kenwood chose to use Mic-E encoding when they developed their first APRS radio, the TH-D7 handheld. They have stuck with Mic-E in their subsequent APRS radios and Yaesu is using Mic-E in their APRS radios, too. As indicated, not many people really pay attention to the Mic-E message types, though, obviously, someone does hence the question the OP received. If you had several people working an event and they all had APRS Mic-E encoders, then you could use Mic-E to convey quite a bit of information without spending a lot of air time to convey the same information using voice. In general practice, though, I'm not sure Mic-E messages are that important. You can read about Mic-E encoding in Section 10 of the APRS v1.01 spec at: http://www.aprs.org/doc/APRS101.PDF Alternatively, a local copy is hosted on this site as well: [[File:APRS101.PDF]] In Mic-E data format, the station’s position, course, speed and display symbol, together with an APRS digipeater path and Mic-E Message Code, are packed into the AX.25 Destination Address and Information fields. The Information field can also optionally contain either Mic-E telemetry data or Mic-E status. The Mic-E Status can contain the station’s Maidenhead locator and altitude. Mic-E packets can be very short. At the minimum, with no callsigns in the Digipeater Addresses field and no optional telemetry data or Mic-E status text, a complete Mic-E packet is just 25 bytes long (excluding FCS and flags). See also: www.aprs.org/aprs12/mic-e-examples.txt www.aprs.org/aprs12/mic-e-types.txt 67f06fe1bfb84a0891e24d9880897a66af530ac3 File:IC-P2AT.jpg 6 469 1837 2015-01-05T03:45:53Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Icom IC-P2AT 0 468 1839 1838 2015-01-05T03:48:41Z Admin 1 wikitext text/x-wiki This handheld transceiver has served me well over the years. It doesn't have VOX (voice operated switch) CTCSS (tone squelch) but it works fine as an APRS Fill-in Digipeater. [[File:IC-P2AT.jpg]] APRS TNC interface cable. I used the following method to connect this radio to a USB Sound card to do APRS. [[File:P2AT-PTT-pinout.jpg|thumb|none|400px]] 4ee3a381a82f20a2761e8a2e6866ad6ad922b85c File:UV-5R.jpg 6 470 1840 2015-01-05T03:52:27Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Baofeng UV-5R 0 471 1841 2015-01-05T03:55:38Z Admin 1 Created page with "This is a low-cost but very versatile handheld transceiver. I have used the 2m/70cm feature many times to talk to satellite repeaters. [[File:UV-5R.jpg|thumb|none|400px]] ..." wikitext text/x-wiki This is a low-cost but very versatile handheld transceiver. I have used the 2m/70cm feature many times to talk to satellite repeaters. [[File:UV-5R.jpg|thumb|none|400px]] Connection method to use this radio as an APRS Rx-only iGate (PTT is optional and can be used to key the radio when using Digipeating) [[File:UV5R-PTT-pinout.jpg|thumb|none|400px]] f4d4aaca0482f953c9460a765f768e61e6b16283 File:Aprs.gif 6 472 1843 2015-01-06T11:04:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TM-1802M TNC-cable.jpg 6 473 1849 2015-01-07T21:55:42Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:1802M-pinout.jpg 6 474 1852 2015-01-07T22:07:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Acp help-menu.jpg 6 476 1857 2015-01-11T08:18:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Acp system-menu.jpg 6 477 1860 2015-01-11T08:22:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Acp aprs-menu.jpg 6 478 1861 2015-01-11T08:23:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 ACP 0 475 1866 1865 2015-01-11T08:29:23Z Admin 1 wikitext text/x-wiki ===ACP -- the APRS Configuration Panel=== To make the installation and configuration of APRS on Linux accessible to the general public I designed a web interface specifically for this purpose. The ACP (APRS Configuration Panel) is accessbile from any web browser, from your laptop, desktop computer, mobile device or through remote networking. Below are screenshots of a recent version (v0.6) of the web interface. [[File:Acp main-menu.jpg|thumb|none|300px|Main menu]] [[File:Acp aprs-menu.jpg|thumb|none|300px|APRS menu]] [[File:Acp system-menu.jpg|thumb|none|300px|System menu]] [[File:Acp help-menu.jpg|thumb|none|300px|Help menu]] 900150d08900e93aa94fcda3422c9551cfa964af File:TNC-Pi TM-1802M.jpg 6 480 1870 2015-01-14T00:28:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Yaesu FT-1802M 0 466 1874 1873 2015-01-14T00:33:45Z Admin 1 wikitext text/x-wiki The Yaesu FT-1802M [[File:Yaesu-FT-1802M.jpg]] We used this radio to set up a Receive-only iGate running on a Raspberry Pi model B+ using the TNC-Pi and a Yaesu FT1802M radio. Fortunately the radio was presented to me with a pre-made TNC cable. Even though this cable was made for the Argent Data OpenTracker with a GPS module, it turned out that the connections are exactly the same for interfacing to the TNC-Pi. [[File:1802M-pinout.jpg|none|RJ-12 microphone socket pinout]] [[File:TM-1802M TNC-cable.jpg|thumb|none|400px]] You may notice the additional Anderson connector. This is not required for the TNC-Pi but for powering the OpenTracker/GPS modules as it was used in its original configuration. The output volume on the SPK port at the back of the radio is not fixed and needs to be adjusted using the front volume knob. [[File:TNC-Pi TM-1802M.jpg|thumb|none|400px|working iGate setup]] a53a986c6d04abfb5a054cee4848db3c6af3d95a APRS Hardware and electronics 0 412 1876 1769 2015-01-15T04:16:22Z Admin 1 wikitext text/x-wiki ==Single-board computers== * Raspberry Pi ==Sound Cards== * CMedia CM106 USB sound adapter ==Pre/De-emphasis filters== * [[Opamp-filters]] homebrew filters to compensate for radios that do not support Pre/De-emphasis ==PTT on Raspberry Pi== * [[GPIO_pin_on_the_RPi_to_trigger_PTT]] ==Realtime Clock (RTC) module== * [[RTC_on_RPi]] 358f70d838023b259f8dd871dd56f8a90919cff5 File:Raspberry-pi-real-time-clock-rtc-ds3231-3.jpg 6 482 1878 2015-01-15T04:20:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:DS3231 RTC.jpg 6 483 1882 2015-01-15T08:44:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Raspberry-pi-real-time-clock-rtc-ds3231-2.jpg 6 484 1885 2015-01-15T09:56:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 RTC on RPi 0 481 1886 1884 2015-01-15T09:56:38Z Admin 1 wikitext text/x-wiki Adding a Realtime Clock to the Raspberry Pi is not super-simple but with the instructions on this page you should get an idea of how it all fits together. (content not yet written..) The DS3231 Realtime Clock modules have been chosen as the preferred platform for providing a Realtime Clock for the Raspberry Pi. These modules hold the time fairly well and with their 5-pin form factor they are one of the smallest RTC boards available for the RPi. [[File:DS3231 RTC.jpg|thumb|none|400px|The DS3231 RTC module]] This is what the end result should look like: [[File:Raspberry-pi-real-time-clock-rtc-ds3231-2.jpg|thumb|none|400px|RTC module added on the GPIO Header]] [[File:Raspberry-pi-real-time-clock-rtc-ds3231-3.jpg|thumb|none|400px|RTC module added on the GPIO Header]] 63617e6204044895cb2f1dac35ae591f7fd2dded File:Old-inkjet-printers.jpg 6 485 1887 2015-01-18T23:37:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MV3025.jpg 6 487 1892 2015-01-19T00:20:11Z Admin 1 Microcarve MV3 wikitext text/x-wiki Microcarve MV3 169609c7e96c6c7900eb097d514d9cf5ba578111 CNC-machine 0 486 1893 1891 2015-01-19T00:21:17Z Admin 1 wikitext text/x-wiki This page is about the adventures of making a CNC machine from old inkjet printers, stepper motors and MDF. The aim is to have a machine that is precise enough to use for making printed circuit boards without using the liquid-etching techniques. I loosely base my design on the MicroCarve series of CNC machines that have had good reports about precision, ease of assembly and low cost. [[File:MV3025.jpg|thumb|none|150px|Inspiration: The Microcarve MV3]] The process will roughly consist of the following steps: * salvage the machined rods and print-head carriages from old printers (need at least 6 rods) * cut the sides and cross bars from MDF sheet * make a Y-axis table with a threaded rod and bolt * attach the cross bars to the sides * attach the Y-axis assembly to the cross bars * make an X-axis table with a threaded rod and bolt * attach the X-axis assembly to the sides * make a Z-axis dremel tool-holder table with a threaded rod and bolt * attach the Z-axis assembly to the X-axis table * find/buy/salvage 3x stepper motors and connect to the threaded rods * make/design/buy stepper motor driver boards * interface 3D modelling software to the stepper motor driver boards 2015 - January Finally our neighbourhood was up for bulk-waste collection again. This time around I made a more serious effort in picking up some discarded inkjet printers and there were plenty. [[File:Old-inkjet-printers.jpg|thumb|none|300px|discarded inject printer ready for salvaging parts]] The following printer models had some useful parts: * Lexmark Z640 (1x 7mm rod with ink carriage) * Canon MP370 (1x 8mm rod from the scanner, 1x 8mm rod from the printer) fe282c89d101c812bf7936a429e7da1b17e94aa5 File:Acp main-menu.jpg 6 479 1894 1869 2015-01-27T01:13:13Z Admin 1 Admin uploaded a new version of &quot;[[File:Acp main-menu.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LTC3525 recommended placement.png 6 488 1895 2015-02-14T10:15:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:T84.jpg 6 489 1899 2015-02-14T10:26:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LTC3525.pdf 6 490 1901 2015-02-14T10:29:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-pfet-vdiv-1.png 6 319 1910 1438 2015-02-14T11:06:20Z Admin 1 Admin uploaded a new version of &quot;[[File:0084-pfet-vdiv-1.png]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-pfet-vdiv-2.png 6 491 1918 1914 2015-02-14T11:57:03Z Admin 1 Admin uploaded a new version of &quot;[[File:0084-pfet-vdiv-2.png]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-pfet-vdiv-3.png 6 492 1926 1922 2015-02-14T23:50:32Z Admin 1 Admin uploaded a new version of &quot;[[File:0084-pfet-vdiv-3.png]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-pfet-vdiv-4.png 6 493 1941 2015-02-15T01:28:32Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Charge-pump-based-negative-voltage-gen.png 6 494 1944 2015-02-15T02:03:36Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-pfet-vdiv-5.png 6 495 1947 2015-02-15T02:16:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-pfet-vdiv-6.png 6 496 1949 2015-02-15T02:36:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Isl1218.jpg 6 497 1955 2015-02-15T02:56:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:SD1602G2.jpg 6 498 1958 2015-02-15T03:07:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:CP2102.jpg 6 27 1964 47 2015-02-15T03:17:11Z Admin 1 wikitext text/x-wiki CP2102 based TTL to UART USB adapter 4a8be486f9b7408cd8a92791d8ca9e30d1f8b06b File:24LC512.jpg 6 500 1969 2015-03-04T23:57:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 2015 VK Contest Dates 0 499 1981 1967 2015-03-30T23:37:29Z Admin 1 wikitext text/x-wiki 2015 VK Contest Dates (Phone) <pre> Date Name Start End (UTC) Bands ------------------------------------------------------------------------ 21-22 Mar John Moyle 0100 - 0059 (24hrs) All bands 2 May Harry Angel 1000 - 1146 (106mins) 3535 - 3665 kHz ?? May VK Trans Tasman 0800 - 1400 (6hrs) 80m (not held in 2015?) 19 Jul VK Trans Tasman 0800 - 1400 (6hrs) 160m 15-16 Aug Rememberance Day 0300 - 0300 (24hrs) All bands 15-16 Aug Intl Lighthouse 0100 - 2359 (48hrs) All bands 3-4 Oct Oceania DX 0800 - 0800 (24hrs) 160/80/40/20/15/10m </pre> Some [[International contests]] 5d34e907fb0a60e9c0c7761e98c85a3e73f5cb6a International contests 0 503 1987 1986 2015-03-31T01:16:07Z Admin 1 wikitext text/x-wiki {| class="wikitable" |+Some International Amateur Radio Contests |- |Date |Name |Bands |Mode |Duration |More info |- |28 March 2015 |CQ World-Wide WPX Contest |160, 80, 40, 20, 15, 10 |Phone |48 hours |http://www.cqwpx.com/ |} b608f53962b69e921cfbcd8557a5064090c37643 File:0084-voltage-datalogger-v1.0.zip 6 504 1988 2015-03-31T20:58:38Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-v1.0-final.jpg 6 505 1990 2015-03-31T21:05:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-v1.0-inside top.jpg 6 506 1992 2015-03-31T21:08:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-v1.0-topview.jpg 6 507 1994 2015-03-31T21:11:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-v1.0-detail1.jpg 6 508 1996 2015-03-31T21:13:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-v1.0-pcb top.jpg 6 509 1998 2015-03-31T21:31:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-v1.0-sch.pdf 6 510 1999 2015-03-31T21:34:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-v1.0-sch.jpg 6 511 2000 2015-03-31T21:37:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TNC-Pi DB9-Female pinout.jpg 6 512 2004 2015-04-07T01:30:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TNC-Pi DB9-Male solderside.jpg 6 513 2005 2015-04-07T01:33:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 TNC-Pi 0 456 2008 2007 2015-04-07T02:48:29Z Admin 1 /* =DB9 Pinout */ wikitext text/x-wiki APRS Terminal Node Controller for the Raspberry Pi [[File:TNC-Pi.jpg|thumb|none|400px]] ==Circuit Board== [[File:RPi-PCB top.jpg]] [[File:RPi-PCB bottom.jpg]] Bell 202 chip: MX614P ==MX614P output levels== The audio output voltage seen on this chip is 1.4V peak-to-peak. [[File:MX614P.jpg]] ==Output Volume== Trimpot R7 controls the output volume of the TNC-Pi to your radio. It is a single-gang pot and has a range from 0V (fully counter-clockwise) to about 700mV (fully clockwise) [[File:TNC-Pi R7.jpg]] The output signals are generated from the MX614P chip. The Audio_OUT on this chip is on pin 7. At any frequency, the output level on this pin is about 1.4V peak-to-peak. This is true for the 487Hz resting tone and the 1200Hz/2200Hz AFSK tones. ==Input Volume== The input volume to the TNC was not found in any documentation but through experiment I found that a input voltage range between 170mV - 300mV was effective in successfully decoding APRS packets. ==TXDelay== The time between PTT-on and actual transmit of data can be set with R6 which controls the TX-Delay. At this stage I have no further information on the range or effectiveness of this trimpot. [[File:TNC-Pi R6.jpg]] ==Radio Header== The 4-pin socket (header probably missing) labeled 'radio' is to get easy access to the Audio, GND and PTT lines. [[File:TNC-Pi radio header.png]] ==DB9 Pinout== The DB9 Female connector on the TNC-Pi board is used to interface RX Audio, TX Audio and PTT to the transceiver. The pinout is as follows: [[File:TNC-Pi DB9-Female pinout.jpg]] Looking at the solder side from a plug (DB9 Male) that fits into the above socket: [[File:TNC-Pi DB9-Male solderside.jpg]] TX Audio is the audio coming out of the TNC when transmitting and will go to the radio to be transmitted. RX Audio is the received audio coming out of the radio that is going to the TCN PTT (push to talk) is done by the TNC-Pi by tying it to GND. This then puts most receivers into transmit. d2949c6a3d55343a200b4a4da87f3a5044926199 Basic ssl encryption 0 11 2011 2009 2015-04-07T23:01:39Z Admin 1 wikitext text/x-wiki Basic information on SSL encryption [http://www.openssl.org/] http://www.openssl.org/ Required libraries for Windows: (Some may libraries may not be detected by the Windows installer binary) [http://www.microsoft.com/en-au/download/details.aspx?id=5582] Microsoft Visual C++ 2008 SP1 Redistributable Package (x86) [http://www.microsoft.com/en-au/download/details.aspx?id=2092] Microsoft Visual C++ 2008 SP1 Redistributable Package (x64) Examples: - encrypt a file using base64 encoding (using -a or -base64 switch): <pre>openssl enc -aes-256-cbc -a -salt -in file.dec -out file.enc</pre> - decrypt a base64-encoded file: <pre>openssl enc -d -aes-256-cbc -a -in file.enc -out file.dec</pre> 9cb843ecb73d8ee59d40d73f1f88f12c6833444e Aprs 0 276 2020 1881 2015-04-07T23:45:12Z Admin 1 wikitext text/x-wiki [[File:Aprs.gif|right]] Automatic Packet Reporting System (APRS) is an amateur radio-based system for real time tactical digital communications of information of immediate value in the local area. In addition, all such data is ingested into the APRS Internet System (APRS-IS) and distributed globally for ubiquitous and immediate access. -- Wikipedia These pages have been created in maintaining some level of order in the process of getting involved in APRS. * [[Protocols dealing with APRS]] * [[Configuring APRS on Linux]] * [[APRS on Linux - Software Tools and utilities]] * [[Aprs-on-rpi]] Detailed blog on setting up a Fill-in Digi on a Raspberry Pi * [[APRS Hardware and electronics]] (Sound cards, TNC's, VOX, RTC, PTT circuits) The following entries have been created for APRS on Linux: * [[ACP]] APRS Configuration Panel * [[aprs-soundmodem]] aprs - USB sound card - soundmodem - aprx * [[alsa]] A list of setups that have been successfully configured to run APRS on a Raspberry Pi {| class="wikitable" |+APRS stations |- |RPi Model |TNC Method |Radio |Usage |Comments |- |A (Rev2) |USB Sound Card |[[Icom IC-P2AT]] |Fill-in Digi |uses [[GPIO pin on the RPi to trigger PTT]] |- |A (Rev2) |USB Sound Card |[[Baofeng UV-5R]] |Rx-Only iGate |uses [[GPIO pin on the RPi to trigger PTT]] |- |B Rev2 |[[TNC-Pi]] |[[Icom IC-207H]] |Fill-in Digi and iGate |needed pre/de-emphasis filters |- |B Rev2 |[[TNC-Pi]] |[[Kenwood TM-211A]] |Rx-Only iGate | |- |B+ |[[TNC-Pi]] |[[Yaesu FT-1802M]] |Rx-Only iGate | |} b288278fabd0d3214a6673d8259e95d4276f7aac Angles 0 192 2021 817 2015-04-23T10:24:56Z Admin 1 wikitext text/x-wiki Angles For simple field work I once wanted to work out how to make a simple phone app that could calculate the distance of a point by measuring the compass angle to it measured from two points. The resulting program does the job very well and has proven its use many times. Here are some screenshots: [[File:Angles 1.jpg|none]] The main opening screen [[File:Angles 2.jpg|none]] The graphical result of the given angles and distance. Download latest and final version: [[File:Angles.zip]] version 25.25.12. c36674a5e08b46b00d1ea5178169c94a398f9ef3 File:0084-graph-1Ah-discharge-and-charge.png 6 514 2022 2015-04-30T04:28:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-graph-car-starting.png 6 515 2025 2015-04-30T04:39:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-graph-solar-charge-controller.png 6 516 2027 2015-04-30T04:43:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LTC3525-ESC6-5-PBF SC70.jpg 6 518 2033 2015-06-26T04:04:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0084-self-sampling-21days.png 6 519 2035 2015-07-13T23:31:19Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:CP210x VCP Windows.zip 6 520 2039 2015-07-25T22:36:59Z Admin 1 CP2101 FTDI driver for Windows XP/Server 2003/Vista/7/8/8.1 (v6.7) wikitext text/x-wiki CP2101 FTDI driver for Windows XP/Server 2003/Vista/7/8/8.1 (v6.7) 5e9e94d1000d07e545ce7c09f847eae6f3b6126e Mcu-notes-02 0 522 2048 2047 2015-09-26T02:08:23Z Admin 1 wikitext text/x-wiki Getting Started with Arduino Talk for Westlakes Amateur Radio Club, Teralba NSW Australia Date: 26 September 2015 - power/USB - drivers - Arduino IDE - IDE settings (board/port) - demo sketch (blink) Hardware and I/O ----------------------- - LED on different port - Digital out / in - Analogue in - PWM - I2C - SPI - RS-232 - sensors - ultrasonic - air pressure - compass / accelerometer / gyroscope (IMU) - magnetometer - pir - barometric pressure / altitude - temperature - humidity - rfid - gps - infrared - touchpad / keyboard - current - light - sound (microphone) - alcohol / gas - http://littlebirdelectronics.com.au/collections/sensors?page=4 - shields - proto - relay - ethernet - LCD - wireless - https://www.sparkfun.com/categories/240?page=all Coding and Libraries ---------------------- - layout of source code - uploading, debugging, size - https://www.arduino.cc/en/Reference/HomePage Other links: Massimo Banzi on the state of arduino (May 2015) https://www.youtube.com/watch?v=k_Elf1XBsQ4 Minimal transceiver using Arduino chip (ATMEGA328) http://www.phonestack.com/farhan/minima.html d25155b61e5ae682c74e910ea43daa24abe0c119 Raspberry Pi 0 285 2049 1734 2015-09-29T05:39:31Z Admin 1 wikitext text/x-wiki See also [[raspberrypi-models-and-versions]] * Adding a shutdown/reset button and feedback LED See: [[rpi-shutdown-button]] [[rpi-notes-01]] 95b7ca13a5e7d9081098f763ac44a05d9e631412 Easy-rsa 0 524 2071 2069 2015-10-14T03:21:48Z Admin 1 wikitext text/x-wiki easy-rsa is a CLI utility to build and manage a PKI CA (Public Key Infrastructure). In laymen's terms, this means to create a root certificate authority, and request and sign certificates, including sub-CAs and certificate revokation lists (CRL). These certificates are valid as per X509 can be used for authentication purposes (e.g. vpn, wireless, encryption). (Setting up on Linux) Earlier versions of [[Openvpn-setup]] used to include a copy of the 'easy-rsa' scripts in a directory under the OpenVPN documentation (/usr/share/doc/openvpn/examples/), however, since several significant improvements to the easy-rsa scripts have given them a life of their own these scripts have undergone some name changes and are now installed in /usr/bin and /usr/share/easy-rsa/. On major linux distributions they are now kept in their own installer package. The central repository for the latest version of easy-rsa is on Github at https://github.com/OpenVPN/easy-rsa. Below are examples on how to set up your own PKI ==easy-rsa v1.x and 2.0== This is the version that came bundled with OpenVPN and lives in the /usr/share/doc/openvpn/examples/easy-rsa/ directory * Copy the Certification Authority scripts from the OpenVPN examples directory <pre> # mkdir /etc/openvpn/easy-rsa # cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ </pre> * Edit /etc/openvpn/easy-rsa/vars according to your organisation. Probably just the lines at the bottom of the file. <pre> vi /etc/openvpn/easy-rsa/vars </pre> * Prepare the CA environment <pre> # cd /etc/openvpn/easy-rsa/ # . ./vars # ./clean-all </pre> Generate CA, server and client certificates * Generate CERTIFICATE AUTHORITY (CA) CERTIFICATE/KEY: * Generate BUILD AN INTERMEDIATE CERTIFICATE AUTHORITY CERTIFICATE/KEY: * Generate BUILD DIFFIE-HELLMAN PARAMETERS (necessary for the server end of a SSL/TLS connection): <pre> # ./build-ca # ./build-key-server server # ./build-dh </pre> * Generate a key for each client: <pre> # ./build-key clientname </pre> ==easy-rsa v2.2== This is the version that is installed as a separate, required package when installing OpenVPN v2.3 (on Debian Jessie). First, run the script to put symlinks and some config files into a new directory (the script will create this directory) <pre> cd /etc/openvpn make-cadir my_ca cd my_ca </pre> Several files have now been created. Most of them are symlinks to scripts that create the various PKI parts. Next, open up the 'vars' file and update the relevant company information at the end of the document. All other information in the vars file can be left as-is. <pre> vi vars (and update company information) </pre> Then we'll run the vars script (chmod it to 700 it it's not set executable) to set several environment variables into memory. You'll need to do this every time you wish to perform any of the other PKI operations such as creating a new set of client certificates. <pre> ./vars </pre> This command should not produce any significant errors or warnings. Then we get to the heart of the matter; setting up the CA. This step is only required once and will create a cryptograhically strong certificate that all other certificates depend on. <pre> ./clean-all (delete any keys from the /keys directory) ./build-dh (generate the diffie-hellman keypairs for entropy) ./pkitool --initca (create a simple certificate database) ./pkitool --server myserver (create a strong CA private and public key certificate) </pre> We now have a CA that is able to generate PKI operations such as generating client certificates. To create a new client certificate key pair: <pre> ./vars (in case you haven't done so already) ./pkitool client1 </pre> ==easy-rsa v3.x== This is the latest version of easy-rsa and I have not yet seen it bundled with OpenVPN on Linux. The instructions are available on the easy-rsa website: https://github.com/OpenVPN/easy-rsa/blob/master/README.quickstart.md ==Overview of generated files== * ca.crt Certificate Authority public key. This file is required for clients to connect to the server. It confirms that the client keys (public and private) have been issued by this CA. This file may be transmitted over an insecure channel and can be left accessible for the world to see. * server.key Certificate Authority private key. This file is used to issue and sign new client certificates. It must be kept secret. Chmod to 400 on the server. This file should not leave the server. * dh1024.pem (or dh2038.pem, or dh4096.pem) Diffie-Hellman parameters. This file contains the entropy required to produce big prime numbers for strong encryption. This file may be flagged chmod 644 but does not need to leave the server as it only has value for generating new client key pairs. * client1.crt Client public key. This file is required for clients to connect to the server. This file may be transmitted over an insecure channel and can be left accessible for the world to see. * client1.key Client private key. This file is required for clients to connect to the server. It must be kept secret. Chmod to 400 if possible. This file should not leave the client computer. 4874c05421662519a5f688a6e675349f6ff4fba6 Openvpn-setup 0 267 2072 2070 2015-10-14T03:24:21Z Admin 1 wikitext text/x-wiki [[File:Openvpn logo.png]] This page describes how to set up an [http://openvpn.net/ OpenVPN] server installation on Debian Linux. For a very basic host-to-host vpn, check out this [[OpenVPN]] page. The recipe here creates an OpenVPN setup with: * certificates * username and password authentication * multiple clients * client vpn dhcp ==On the Server (Debian Linux)== ===Install the software=== * Make sure to have 'contrib' listed in /etc/apt/sources.list <pre> # apt-get update # apt-get install openvpn </pre> ===Set up a Certification Authority=== See the [[easy-rsa]] page for installation details. ===Create vpn client user accounts=== * On the vpn server add a new user group called 'vpn-users' <pre> groupadd vpn-users </pre> * Create a new vpn account without a shell and make it part of the vpn-users group. We need to do this for every vpn client. * set the password for the vpn client user account. <pre> # useradd -s /bin/false -g vpn-users client1 # passwd client1 </pre> ===Create OpenVPN pam.d authentication plugin=== * create a file /etc/security/vpn.group.allowed <pre> # echo "vpn-users" > /etc/security/vpn.group.allowed </pre> * copy the default authentication script to create the /etc/pam.d/ovpn plugin <pre> # cp /etc/pam.d/login /etc/pam.d/ovpn </pre> * edit the ovpn pam file, position the cursor at the first line and insert an auth directive <pre> auth required pam_listfile.so onerr=fail item=group sense=allow file=/etc/security/vpn.group.allowed </pre> ===Create vpn server configuration file=== * create the server configuration file /etc/openvpn/server.conf <pre> port 655 proto udp dev tun0 ca /etc/openvpn/easy-rsa/keys/ca.crt # generated keys cert /etc/openvpn/easy-rsa/keys/server.crt key /etc/openvpn/easy-rsa/keys/server.key # keep secret dh /etc/openvpn/easy-rsa/keys/dh1024.pem #plugin /usr/lib/openvpn/openvpn-auth-pam.so ovpn # old location plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so ovpn # new location script-security 3 server 10.9.8.0 255.255.255.0 # internal tun0 connection IP ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo # Compression - must be turned on at both ends persist-key persist-tun status /var/log/openvpn-status.log verb 3 # verbose mode client-to-client </pre> Additional instructions to use your vpn as the client's default internet gateway. [[vpn-gateway]] ===Distribute certificates to client(s)=== * Copy the ca.crt, clientname.crt, clientname.key from the server to the client(s). For a Linux client, copy the files to /etc/openvpn/. For a Windows client, copy the files to C:\Program Files\OpenVPN\config\. ==On the Client (Debian Linux)== (see further down for setting up the client connection on Windows) ===Install the software=== * Make sure to have 'contrib' listed in /etc/apt/sources.list <pre> # apt-get update # apt-get install openvpn </pre> ===Create client configuration file=== * create the client configuration file at /etc/openvpn/client.conf <pre> client remote remote.vpn.server.address dev tun0 port 655 proto udp auth-user-pass nobind ca /etc/openvpn/ca.crt cert /etc/openvpn/clientname.crt key /etc/openvpn/clientname.key comp-lzo # Compression - must be turned on at both ends # add a route to the client see other hosts on the server network # you may need to update this line to match your network setup push "route 192.168.0.0 255.255.255.0" persist-key persist-tun verb 3 </pre> ==On the Client (Windows)== Probably the most used add-on to OpenVPN is the Windows client GUI. The ​old client GUI is effectively unmaintained, but is still (as of 19 February 2013) included in the official OpenVPN-2.3 installer packages. The ​new GUI is more advanced and uses the OpenVPN management interface for controlling the OpenVPN daemon and should therefore be more reliable. The new GUI will eventually replace the old GUI in the official installers. ===Install the software=== * Download the openvpn windows installer from http://openvpn.net/index.php/open-source/downloads.html * Run the installation binary and install the software, just accept all defaults. ===Create the client configuration file=== * open a text editor, create c:\program files\openvpn\config\client.ovpn and add the following lines: <pre> client remote remote.server.ip.address dev tun port 655 proto udp auth-user-pass nobind ca ca.crt cert clientname.crt key clientname.key comp-lzo # Compression - must be turned on at both ends # add a route to the client see other hosts on the server network # you may need to update this line to match your network setup push "route 192.168.0.0 255.255.255.0" keepalive 10 60 ping-timer-rem verb 3 </pre> ==Start the VPN tunnel== ===On the server (Debian Linux)=== * with the .conf file placed in /etc/openvpn/ the vpn server will be listening for incoming connections automatically when the system is booted. * use the init script to force a restart of the vpn server <pre> /etc/init.d/openvpn restart </pre> * check the log files in /var/log/ for debugging ===On the client (Debian Linux)=== * with the .conf file placed in /etc/openvpn/ the vpn client will automatically try to make a connection to the vpn server when the system is booted. * use the init script to force a restart of the vpn client <pre> /etc/init.d/openvpn restart </pre> * a prompt asking you for a username and password will appear on the console. Enter the credentials for the client account and press ENTER. * check the log files in /var/log/ for debugging ===On the client (Windows)=== * From the Windows program files menu, start the OpenVPN GUI program. The openvpn icon will appear in the sytem tray. Right-click on the icon and select 'Connect' on the config for your vpn. A dialog box prompting for a username and password will appear. [[File:Openvpn-win-gui.PNG]] Enter the credentials for the client account and click 'Ok'. That's it! :-) 6db98f35ba8ae43fa44d1e32272facf9563783dc Vpn-gateway 0 525 2074 2073 2015-10-14T03:35:22Z Admin 1 wikitext text/x-wiki You can use the OpenVPN server as the client's default gateway. This method is used by commercial VPN as-a-service companies to offer overseas client 'exit nodes' in order to bypass any local restrictions or traffic filtering. See [[openvpn-setup]] for setting up the vpn. The server must be instructed to route and forward any vpn traffic to its default gateway (wherever it is located). * for a server that is connected with a public ip (e.g. 158.22.51.103) relevant section in /etc/rc.firewall <pre> # forward packets to and from vpn tunnel to local network echo "1" > /proc/sys/net/ipv4/ip_forward # allow incoming OpenVPN traffic $IPTABLES -A INPUT -p UDP -i $INT_IF --dport 655 -m state --state NEW -j ACCEPT # vpn output rules $IPTABLES -A OUTPUT -p ALL -s $VPN_IP -j ACCEPT $IPTABLES -A OUTPUT -p ALL -s $VPN_NW -j ACCEPT # Forwarding rules # forward vpn packets to and from local lan $IPTABLES -A FORWARD -i $VPN_IF -o $INT_IF -j ACCEPT $IPTABLES -A FORWARD -i $INT_IF -o $VPN_IF -j ACCEPT # Masquerading rules # masquerade outgoing vpn traffic to local lan so we receive replies $IPTABLES -t nat -A POSTROUTING -o $INT_IF -j MASQUERADE </pre> add this to the client openvpn config file: <pre> redirect-gateway def1 bypass-dhcp dhcp-option DNS 10.8.9.1 </pre> e7c741cd23ac9dc75bb56ee70026eaf9d0067610 Rpi-notes-01 0 523 2076 2075 2015-10-16T09:59:30Z Admin 1 wikitext text/x-wiki Getting started with Raspberry Pi Talk at Westlakes Amateur Radio Club 17 October 2015 https://www.raspberrypi.org/ noobs vs raspbian checksums and torrents http://www.nirsoft.net/utils/hash_my_files.html partitions and sd cards win32diskimager download and install http://sourceforge.net/projects/win32diskimager/ dd for windows http://www.chrysocome.net/dd writing image to sd card boot into linux login shutdown set memory split (raspi-config) find current ip address GPIO http://elinux.org/RPi_Low-level_peripherals --- next --- Linux * Putty / logging in * Home directory and changing directories ~, cd, pwd, ls, root dir, structure, ls –l command explained * File permissions (dir, owner, group, world) * Other commands: touch, cat, grep, | (pipe), more, less * Vi and basic commands: a, dd, x, ., n, :wq, :wq!, ZZ, r, $, ^, gg, G, cw, / (find) * Datestamp / unix time * keeping system up to date HTML * .html / .htm * Basic structure: html-head-body, title * Bold, nbsp, p, br, * Tables * Forms * css * images * javascript PHP * <?php ?> open and start tags, renaming extention to .php * Basic commands: phpinfo(), echo, date * Printing html tags from php * Variables and arithmetic * String concatenation * Commands: substring, include, if-then, while, * Fetching html form variables * Accessing mysql from php MySQL * Database and table * Rows, columns, index, auto-increment, id-field, primary key * Phpmyadmin web interface * Field types * SELECT, INSERT, UPDATE, DELETE * Sorting 106a9b41bfc04668a1881d1e95224db12c9f9385 Wikipost:Copyrights 4 526 2078 2015-10-19T23:50:57Z Admin 1 Created page with "nothing here, move along.." wikitext text/x-wiki nothing here, move along.. e5d85e38a68daf00f1b03f593344e27b4d14793a File:SP0620.jpg 6 528 2086 2015-11-13T00:30:00Z Admin 1 Jaycar pn: SP0620 - SPST PCB Mount Tactile - Metallic Vertical with LED - Red wikitext text/x-wiki Jaycar pn: SP0620 - SPST PCB Mount Tactile - Metallic Vertical with LED - Red f402b2b18d715ad93d870a54d841075431008cef File:CH340DS1.PDF 6 529 2090 2015-11-13T08:02:18Z Admin 1 CH340 datasheet wikitext text/x-wiki CH340 datasheet 0421af3d0711e4237cc4b620696743b0e623145a File:UART CH341 W7.ZIP 6 530 2092 2015-11-13T08:07:35Z Admin 1 Drivers for the CH340/341 UART over USB chip wikitext text/x-wiki Drivers for the CH340/341 UART over USB chip 17219b468403ead80086cce547d8ecf8c15910b3 File:Nano-clone CH340.JPG 6 532 2100 2015-11-13T08:26:44Z Admin 1 Cheap Arduino Nano clone for three dollars off eBay. Uses the CH340 UART. wikitext text/x-wiki Cheap Arduino Nano clone for three dollars off eBay. Uses the CH340 UART. c520aa0044791a08fab92a0b12c5865853615c1c CH340-UART 0 531 2105 2104 2015-11-13T08:37:59Z Admin 1 wikitext text/x-wiki This is a cheap alternative IC for the FTDI chip to provide UART over USB. Manufacturer: WinChipHead ==Datasheet:== * CH340DS1 [[File:CH340DS1.PDF]] ==USB information== Vendor ID: 1A86 Device ID: 7523 REV: 0254 ==Manufacturer information== Manufacturer: Jiangsu Nanjing QinHeng Electronics Co Websites: http://www.wch-ic.com and http://www.wch.cn and http://www.winchiphead.com ==Software/Drivers== Drivers: http://www.wch.cn/download/CH341SER_ZIP.html Locally hosted driver for Windows 7: [[File:UART CH341 W7.ZIP]] I had success with these drivers on a $3 (YES!) Arduino Nano clone board from China. [[File:Nano-clone CH340.JPG|190px|thumb|none|CH340 chip on Nano clone]] ==Alternate links== * http://www.5v.ru/ch340g.htm f024837e551b694a25cfa66b10c6aebd9327b35a SafeList 0 220 2110 2109 2015-11-16T22:10:07Z Admin 1 wikitext text/x-wiki [[File:Safelist icon.png]] SafeList is an application to encrypt and decrypt information for privacy purposes. It uses AES-128 as it's main encryption engine and does not use any network communication to further isolate your data and prevent leakage to other channels. * https://en.wikipedia.org/wiki/Advanced_Encryption_Standard Google Play app webiste: https://play.google.com/store/apps/details?id=map.safelist Developer Blog for SafeList available. Click the below link for more news updates. http://captchadevt.blogspot.com.au/ Suggested use: * password lists * phone numbers * bank account login details * credit card numbers * etc.. [[File:Safelist feature graphic small.jpg|none]] ==Screen shots== {| style="background-color:#ffffff;" cellpadding="0" cellspacing="10" border="0" |[[File:Safelist-ss1.PNG|150px|none]] |[[File:Safelist-ss2.PNG|150px|none]] |[[File:Safelist-ss3.PNG|150px|none]] |} ==Downloads== The application can be found on Google Play. Look for 'safelist' and the results should contain a link to the app. ==Usage== After installing the program, you will need to set your own password. Initially, to log in, just press the 'Login' button. From the list of displayed items, press the Android Menu button and select 'settings'. From the settings page select 'Change Master Password'. You only need to set the bottom two fields to your new password and press save. Your new password is immediately active. ==Support and Feedback== please email me at [mailto:captchadevt@gmail.com?Subject=SafeList_feedback captchadevt@gmail.com] for app support questions and feedback. bf5f067eafc63f1c782144bc6475d62352268c45 Linux-cli-intro 0 527 2111 2085 2015-11-26T04:15:15Z Admin 1 wikitext text/x-wiki The following pointers can be used to get a basic understanding of a Linux system. Concepts: *kernel *debian/raspbian *root *shell *filesystem (ext2) *firmware *apt *mount points *shm *proc *dev *tty *stderr/stdout *sound *putty/ssh *ncurses (text based gui) <pre> command line ------------ shutdown - shut down or reboot system passwd - change password man - man(ual) page with info date - prints date and time sudo - do as root su - substitute user ls - list files in a directory alias - shortcuts to commands ps - process information df - disk free du - disk usage cat - print contents (of a file) echo - print text (on screen) touch - create/update file/timestamp more - show output per-screen grep - filter output by keyword(s) match head - show top of (a file) tail - show bottom (of a file) sort - sort alphabetically find - search for matching files or directories cp - copy file(s) or directories mv - move file(s) or directories rm - delete file(s) pwd - print working directory cd - change directory mkdir - make directory rmdir - remove directory chown - change ownership permissions of a file or directory chgrp - change group permissions of a file or directory chmod - change access and execute permissions of a file or directory groups - show group memberships ifconfig - show network interfaces netstat - show network connections cron - execute scheduled commands crontab -e - edit user's own crontab crontab -e -u <user> - edit other user's crontab crontab -l - show contents of crontab <cmd> & - background a process nohup <cmd> - background a process independent of shell screen - background shell CTRL-PGUP - scroll screen up CTRL-PGDN - scroll screen down arrow up - previous command arrow down - next command history - show list of previous commands !<nr> - issue command nr apt (software package management) apt-get update - fetch a current list of all packages from the Internet apt-get upgrade - check for and install any packages that need updating apt-get clean - empty cache of downloaded packages apt-cache search <name> - find if a package exists apt-cache show <name> - show detailed information about a package apt-get install <name> - install a package apt-get remove <name> - remove a package apt-get remove --purge <name> - remove a package + any configuration files dpkg -l - show list of all installed packages aptitude - curses based package management rapspi-config - configure raspberry pi rpi-update - update rpi firmware startx - start x environment iptraf - monitor network activity bwm-ng - bandwidth monitor Files ----- /etc/hostname /etc/hosts /etc/debian_version /etc/fstab /etc/network/interfaces /etc/resolv.conf /etc/wpa.conf /etc/rc.local /etc/apt/sources.list /etc/default/keyboard Directories ----------- /usr/local/bin /home /boot /etc /usr /var/www /mnt /tmp /dev/shm Applications ------------ Apache - web server Samba - Windows-compatible File Server MySQL - Database Server NTP - Time server Programming ----------- Bash Python Perl C/C++ PHP Scratch (RPi) Interfacing with the Raspberry Pi GPIO -------------------------------------- Level Converter Python I2C </pre> Further reading: ---------------- http://www.debian.org http://www.raspberrypi.org http://www.themagpi.com Putty, the Windows SSH client: ------------------------------ http://www.chiark.greenend.org.uk/~sgtatham/putty/ c1bdaace5aad03cdf3e83ca1cfd5e69dd1b090e2 Copy-rootfs 0 265 2112 2079 2016-01-20T03:44:35Z Admin 1 wikitext text/x-wiki This is a command to copy the current (running, live) root filesystem to another (attached) disk. Last tested with Debian 8.1 (Jessie) and all works fine. * add the new disk (e.g. /dev/sdb) to the system * set up a linux partition and make it active (enable boot flag) * format the target filesystem to ext2 * mount the target filesystem to /mnt * copy files across.. <pre> (cd / ; tar -cf - . --one-file-system) | (cd /mnt ; tar xvfpB - ) cp -r /dev/* /mnt/dev/ </pre> * find out new disk UUID (ls /dev/disk/by-uuid/....) * update UUID's in fstab and grub.cfg <pre> sed -i 's/old-uuid/new-uuid/g' /mnt/etc/fstab sed -i 's/old-uuid/new-uuid/g' /mnt/boot/grub/grub.cfg </pre> * install grub <pre> grub-install --root-directory=/mnt /dev/sdb </pre> * shutdown system * detach old disk * move new disk to Primary Master (IDE) * boot system with new disk * reinstall grub one final time: <pre> update-grub grub-install /dev/sda -or- dpkg-reconfigure grub-pc </pre> ===TROUBLESHOOTING=== - at the blue grub menu, enter the edit mode (press 'e') and change the UUID=xxxx to /dev/sda1 - if you've forgotten to update the uuid, you can still boot the disk <pre> grub rescue> grub rescue> set prefix=(hd0,1)/boot/grub grub rescue> insmod ext2 grub rescue> set root=(hd0,1) </pre> (find out the kernel image name using ls, ls (hd0,1)/, ls (hd0,1)/boot) <pre> grub rescue> linux /boot/vmlinuz-3.16.0-4-686-pae root=UUID=xxxxx ro recovery nomodeset grub rescue> initrd /boot/initrd.img-3.16.0-4-686-pae grub rescue> boot </pre> (instead of the UUID you can also use 'root=/dev/sda1') (you can also remove 'ro recovery nomodeset') 86a0b5d27422c2becad469f5c5d50de223e6f165 File:Attiny85 pinout.png 6 533 2123 2016-01-22T04:15:32Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:4-small-solar-panels.png 6 534 2126 2016-01-26T03:24:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Solar-test-setup.jpg 6 537 2132 2016-01-26T04:02:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 4-small-solar-panels open-circuit-voltage.png 6 536 2134 2128 2016-01-26T04:05:32Z Admin 1 Admin uploaded a new version of &quot;[[File:Datalogger 4-small-solar-panels open-circuit-voltage.png]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 ATtiny84 PWM 0 314 2137 2003 2016-02-01T02:53:40Z Admin 1 wikitext text/x-wiki <pre> // Example #1 PWM on pin PB2 (OC0A which is on 8-bit timer0) // For 8MHz clock: 61.2kHz period (16.25ms) of which half is on and half is off DDRB = 1<<DDB2; // make OC0A (DDB2) PWM output pin TCCR0A = (1<<COM0A1) | (1<<COM0B0) | (1<<WGM00); // Clear OC0A/OC0B on Compare Match (bit 7 + 6) // PWM, Phase Correct TCCR0B = (1<<CS02); // clkI/O/256(from prescaler) // not used // TIMSK1=0B00000010; //enable output compare interrupt for OCR1A OCR0A = 127; // set 50% duty cycle (0.5*256) // Example #2 PWM on pin PA6 (OC1A which is on 16-bit Timer1) // For 8MHz clock: 61.2kHz period (16.25ms) of which half is on and half is off DDRA = 1<<DDA6; // make OC1A (DDA6) PWM output pin TCCR1A = (1<<COM1A1) | (1<<COM1B0) | (1<<WGM00); // Clear OC1A/OC1B on Compare Match (bit 7 + 6) // PWM, Phase Correct TCCR1B = (1<<CS02); // 256 prescaler OCR1A = 127; // set 50% duty cycle (0.5*256) </pre> See also: * [[ATtiny84_ADC]] * [[ATtiny85_PWM]] 9e3ba8b9eea7f1251de72e0337e24370f14e2e21 ATtiny84 ADC 0 501 2138 1977 2016-02-01T02:54:35Z Admin 1 wikitext text/x-wiki Here's a snippet of code to use the ADC from an ATtiny84 microcontroller. In this example, the code was written for a t84 (Atmel AVR ATtiny84), but with minimal adjustments this code should work on microcontrollers from the same family (such as the ATtiny25, ATtiny45, ATtiny24, ATtiny44 and ATiny85) as well. <pre> void initADC() { /* this function initialises the ADC ADC Notes Prescaler ADC Prescaler needs to be set so that the ADC input frequency is between 50 - 200kHz. Example prescaler values for various frequencies Clock Available prescaler values --------------------------------------- 1 MHz 8 (125kHz), 16 (62.5kHz) 4 MHz 32 (125kHz), 64 (62.5kHz) 8 MHz 64 (125kHz), 128 (62.5kHz) 16 MHz 128 (125kHz) below example set prescaler to 16 for mcu running at 1MHz */ ADMUX = (0 << REFS1) | // Sets ref. voltage to Vcc, bit 1 (0 << REFS0) | // Sets ref. voltage to Vcc, bit 0 (0 << MUX5) | // use ADC1 for input (PA1), MUX bit 5 (0 << MUX4) | // use ADC1 for input (PA1), MUX bit 4 (0 << MUX3) | // use ADC1 for input (PA1), MUX bit 3 (0 << MUX2) | // use ADC1 for input (PA1), MUX bit 2 (0 << MUX1) | // use ADC1 for input (PA1), MUX bit 1 (1 << MUX0); // use ADC1 for input (PA1), MUX bit 0 ADCSRA = (1 << ADEN) | // Enable ADC (1 << ADPS2) | // set prescaler to 16, bit 2 (0 << ADPS1) | // set prescaler to 16, bit 1 (0 << ADPS0); // set prescaler to 16, bit 0 ADCSRB = (1 << ADLAR); // left shift result (for 8-bit values) // (0 << ADLAR); // right shift result (for 10-bit values) } int main( void ) { initADC(); while(1) { ADCSRA |= (1 << ADSC); // start ADC measurement while (ADCSRA & (1 << ADSC) ); // wait till conversion complete if (ADCH > 128) { // ADC input voltage is more than half of VCC } else { // ADC input voltage is less than half of VCC } } return 0; } </pre> See also: * [[ATtiny84_PWM]] * [[ATtiny85_ADC]] * [[C and C++]] 5391d348de5f1bc9e91df4c1066a5d5ba602fb43 ATtiny85 PWM 0 239 2140 2139 2016-02-01T09:12:34Z Admin 1 wikitext text/x-wiki This is a cut-and-paste example of setting PWM on a Atmel AVR ATtiny85. It uses pin PB0. [[File:Attiny85_pinout.png]] Tested on: ATtiny85 <pre> #include <avr/io.h> #include <util/delay.h> #include <avr/pgmspace.h> #define HIGH 1 #define LOW 0 #define INPUT 1 #define OUTPUT 0 #define LED PB0 // OC0A PWM output pin (on t84=PB2, t85=PB0) #define SWITCH PB4 // ptt switch const uint8_t sine_wave_50[] PROGMEM= { 133,145,158,168,179,189,196,204,209,214, 217,219,219,219,217,212,207,199,191,184, 176,166,156,143,133,122,112, 99, 89, 79, 71, 64, 56, 48, 43, 38, 36, 36, 36, 38, 41, 46, 51, 59, 66, 77, 87, 97,110,122, }; void init_pwm() { //Set PORTB1 pin as output DDRB=0xFF; // initial OCR1A value OCR0A=80; //Output compare OC1A 8 bit non inverted PWM TCCR0A=0x91; //start timer without prescaler TCCR0B=0x01; //enable output compare interrupt for OCR1A TIMSK=0x10; } int main() { pinMode(SWITCH,OUTPUT); digitalWrite(SWITCH,LOW); init_pwm(); uint8_t step=0; while(1) { digitalWrite(SWITCH,HIGH); // send a 1000Hz tone for (step=0; step<50; step++) { OCR0A = pgm_read_byte(&sine_wave_50[step]); _delay_us(20); } } return 0; } </pre> See also: * [[ATtiny84_PWM]] * [[ATtiny85_ADC]] 16c4f60e96262dd7750e41e39cb98e36c594dff8 2016 VK Contest Dates 0 538 2144 2016-03-03T03:45:36Z Admin 1 Created page with "2016 VK Contest Dates (Phone) <pre> Date Name Start End (UTC) Bands ------------------------------------------------------------------------ ..." wikitext text/x-wiki 2016 VK Contest Dates (Phone) <pre> Date Name Start End (UTC) Bands ------------------------------------------------------------------------ 19-20 Mar John Moyle 0100 - 0059 (24hrs) All bands 2 May Harry Angel 1000 - 1146 (106mins) 3535 - 3665 kHz 16 Jul VK Trans Tasman 0800 - 1400 (6hrs) 160m, 80m, 40m 13-14 Aug Rememberance Day 0300 - 0300 (24hrs) All bands 20-21 Aug Intl Lighthouse 0100 - 2359 (48hrs) All bands 1-2 Oct Oceania DX 0800 - 0800 (24hrs) 160/80/40/20/15/10m </pre> Some [[International contests]] a342bd5923664373969b0c23c214733a306e99f1 File:Yellow-tailed black cockatoo.jpg 6 539 2147 2016-05-31T10:39:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Frogmouth.jpg 6 540 2149 2016-05-31T10:43:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Sun-hemmi-p280 front.jpg 6 542 2159 2016-06-15T09:52:55Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Sun-hemmi-p280 back.jpg 6 543 2161 2016-06-15T09:54:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Faber-Castell-52-82 front.jpg 6 548 2172 2016-06-15T10:38:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Faber-Castell-52-82 back.jpg 6 549 2174 2016-06-15T10:42:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Faber-castell-67-87 front.jpg 6 550 2175 2016-06-15T10:46:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Oddities 0 102 2187 2157 2016-06-15T22:38:53Z Admin 1 wikitext text/x-wiki Mixed bag of things. [[dust-storms-23-sep-2009]] [[recipes]] [[observations of the Australian culture by a Dutch immigrant]] [[sliderules]] 34a6d3c01238f534c5126ab295c54fde8029c56d File:Faber-Castell-67-87 back.jpg 6 551 2188 2016-06-21T22:38:30Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Sun-hemmi-versalog-II front.jpg 6 544 2221 2164 2016-06-24T09:12:25Z Admin 1 Admin uploaded a new version of &quot;[[File:Sun-hemmi-versalog-II front.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Sun-hemmi-versalog-II back.jpg 6 545 2222 2165 2016-06-24T09:13:38Z Admin 1 Admin uploaded a new version of &quot;[[File:Sun-hemmi-versalog-II back.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Moteino 1.0.6.zip 6 553 2229 2016-06-27T09:34:13Z Admin 1 Moteino Core files wikitext text/x-wiki Moteino Core files 4f0431609be5479f3d2cf71920ebbc52fd91ebce File:RFM69-master.zip 6 554 2233 2016-06-27T09:50:37Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:SPIFlash-master.zip 6 555 2235 2016-06-27T09:52:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LowPower-master.zip 6 556 2243 2016-06-27T11:21:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Moteino-setup 0 552 2245 2244 2016-06-27T11:38:10Z Admin 1 wikitext text/x-wiki Starting to use some Moteinos always left me a bit searching for a clear and simple guide on how to set up the boards.txt and libraries in the Arduino IDE. We distinguish two specific features of the Arduino IDE: > use custom boards (Moteino, Anarduino, etc..) - Having a way to easily select a custom board will allow you to program these boards without having to worry about which microcontroller is on the board or how they are wired. - In order to program a sketch to a custom board you select the corresponding board in the Arduino IDE menu at: Tools - Boards - - custom boards need to be added to the 'hardware' folder (either in the user's sketchbook's or arduino's program's 'hardware' folder) > use custom libraries (Dallas, LCD, etc..) - To add sensors or functions to your sketch you can load specific libraries. These will have the proper protocols coded in and work seamlessly with Arduino code. Libraries usually don't care on which board they run. - In order to make use of a custom library you reference to them in your code with the '#include' statement - custom libraries need to be added to the 'libraries' folder (either in the user's sketchbook's or arduino's program's 'libraries' folder) To add support for Moteino in the Arduino IDE we need to add both 'hardware' and 'libraries'. * the 'hardware' (Moteino Core files) will add the Moteino and Moteino MEGA boards to the list of selectable boards * the 'libaries' (RFM69 and SPIFlash) will allow the sketches to communicate with the HopeRF Radio Module (and optional EEPROM module for OTA programming) There are two ways to add the 'hardware' to Arduino. * copy files manually into the Arduino hardware folder * with the new Arduino Board Manager (available in version 1.6.x and up) ==Manual Method (boards and libraries)== ===Step 1 - Install the Moteino Core files into the Arduino installation folder=== * download and unzip the core file: Moteino Core: [[File:Moteino 1.0.6.zip]] (local copy) Github source: https://github.com/LowPowerLab/Moteino/tree/master/MEGA/Core Enter the unzipped 'Moteino' directory and: * rename the 'avr' directory to 'moteino' * move the newly named 'moteino' directory into ~/sketchbook/hardware/ ===Step 2 - Install the RFM69, LowPower and SPIFlash libraries=== * download and unzip these three files: RFM69: [[File:RFM69-master.zip]] (local copy) Github source: https://github.com/LowPowerLab/RFM69 LowPower: [[File:LowPower-master.zip]] (local copy) Github source: https://github.com/LowPowerLab/LowPower SPIFlash: [[File:SPIFlash-master.zip]] (local copy) Github source: https://github.com/LowPowerLab/SPIFlash * after unzipping, rename the RFM69-master folder to just 'RFM69' * do the same with the unzipped LowPower-master and SPIFlash-master folders ===Step 3 - check for proper workings=== Start up the Arduino IDE and confirm that: * the Moteino and Moteino MEGA boards can be selected from the list of boards * in the Libraries menu you can see the RFM69, Low-Power and SPIFlash libraries ==Easy Method (boards only)== ===Step 1 - Install the Moteino Core files into the Arduino installation folder=== There's actually only one step to this.. * Open the Arduino IDE and from the menu select File - Preferences * copy and paste this path for a new Board Manager URL: https://lowpowerlab.github.io/MoteinoCore/package_LowPowerLab_index.json * Click OK and in the menu now go to: Tools - Board - Board Manager * wait until the download has completed and from the list select the 'Moteino' entry and click 'Install' * once the installation has completed you can now select the Moteino boards from the boards menu That's it! One more thing for actually using the Moteinos: The RFM69 library is suitable for both the 20mW RFM69(C)W and the 100mW RFM69H(C)W modules (The 'C' only indicates Compatibility with the older RFM12B footprint, functionality wise they are the same). If you have the higher-powered 100mW version (RFM69HCW or RFM69HW) make sure to include the IS_RFM69HW define in your code: #define IS_RFM69HW //uncomment only for RFM69HW! Remove/comment if you have RFM69W! The Moteino demo code also clearly indicates this. 21e1bc83d20fe644ba757594ff527ddb7d9ff463 File:Pickett-n1006-es front.jpg 6 546 2274 2169 2016-07-01T10:20:11Z Admin 1 Admin uploaded a new version of &quot;[[File:Pickett-n1006-es front.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pickett-n1006-es back.jpg 6 547 2275 2170 2016-07-01T10:22:48Z Admin 1 Admin uploaded a new version of &quot;[[File:Pickett-n1006-es back.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Plane-landing.jpeg 6 558 2282 2016-07-07T09:46:32Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Car-on-dirt-road.jpeg 6 559 2283 2016-07-07T09:50:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Explosions-in-space.jpeg 6 560 2284 2016-07-07T09:52:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Monitor-text-beeps.jpeg 6 561 2285 2016-07-07T09:56:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Satellite-in-orbit.jpeg 6 562 2286 2016-07-07T09:57:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Knife-stabbing.jpeg 6 563 2287 2016-07-07T10:00:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Bomb-countdown.jpeg 6 564 2289 2016-07-07T10:02:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Camera-on-a-ship.jpeg 6 565 2290 2016-07-07T10:06:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Binoculars.jpg 6 557 2292 2280 2016-07-07T10:09:29Z Admin 1 Admin uploaded a new version of &quot;[[File:Binoculars.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Explosion.jpeg 6 566 2293 2016-07-07T10:47:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pickett-N600-ES front.png 6 569 2301 2300 2016-07-15T10:52:40Z Admin 1 Admin uploaded a new version of &quot;[[File:Pickett-N600-ES front.png]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pickett-N600-ES back.jpg 6 570 2302 2016-07-15T10:54:33Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pickett-N600-es back.jpg 6 568 2304 2303 2016-07-15T11:01:05Z Admin 1 Admin uploaded a new version of &quot;[[File:Pickett-N600-es back.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pickett-N600-es front.jpg 6 567 2305 2297 2016-07-15T11:04:00Z Admin 1 Admin uploaded a new version of &quot;[[File:Pickett-N600-es front.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Powertech MP3129 solar-charge-controller.jpg 6 571 2306 2016-08-18T01:07:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Kemo M149 solar-charge-controller.jpg 6 572 2308 2016-08-18T22:05:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Powertech-MB-3526.jpg 6 573 2310 2016-08-18T22:14:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MCP73831.jpg 6 575 2313 2016-08-18T22:21:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LTC4054.jpg 6 576 2314 2016-08-18T22:26:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Solar-Charge-Controller pwm blue.jpg 6 577 2318 2016-08-18T22:33:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blue-PWM-SCC-Example.png 6 578 2322 2016-08-22T00:04:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blue-PWM-Solar-Charge-Controller manual.jpg 6 579 2324 2016-08-22T00:11:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:KEMO-M149 charge-example.png 6 580 2327 2016-08-30T09:14:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MB3526-charge-example.png 6 581 2330 2016-09-01T03:39:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LTC-4054-charge-example.png 6 582 2332 2016-09-01T03:42:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:CMP12-24 Black-Orange Solar-Charge-Controller.jpg 6 584 2337 2016-09-01T03:50:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:CMP12-24 Black-Orange Solar-Charger manual.pdf 6 585 2339 2016-09-01T03:51:59Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MP3129 manual.pdf 6 586 2341 2016-09-01T03:54:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LTC-4054-42xf.pdf 6 587 2343 2016-09-01T03:59:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MCP73831t.pdf 6 588 2344 2016-09-01T04:01:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MP3129-charge-example.png 6 583 2346 2335 2016-09-05T10:32:36Z Admin 1 Admin uploaded a new version of &quot;[[File:MP3129-charge-example.png]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0124-433 v1.0.zip 6 589 2349 2016-09-06T01:22:39Z Admin 1 PCB dipole antenna for 433MHz wikitext text/x-wiki PCB dipole antenna for 433MHz bbd0c7648c35bfb86ec3a7b8903e7d8017bb3b5e File:0124-868 v1.0.zip 6 591 2352 2016-09-06T01:24:19Z Admin 1 PCB dipole antenna for 868MHz wikitext text/x-wiki PCB dipole antenna for 868MHz 6556e2db90a65f5aaeea951b2c6a171c45e76966 File:0124-915 v1.0.zip 6 592 2354 2016-09-06T01:25:29Z Admin 1 PCB dipole antenna for 915MHz wikitext text/x-wiki PCB dipole antenna for 915MHz 4818a9f1eb10609a9d29597775fb9c09c4739de2 File:VNA-433-PCB-dipole.jpg 6 593 2356 2016-09-06T01:28:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Test-setup PCB-dipole SDR-Kits.jpg 6 594 2360 2016-09-06T01:31:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:VNA-868-PCB-dipole.jpg 6 595 2367 2016-09-06T01:36:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:VNA-915-PCB-dipole.jpg 6 597 2369 2016-09-06T01:38:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0124-433 PBC dipole diptrace.zip 6 599 2374 2016-09-06T01:47:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0124-868 PBC dipole diptrace.zip 6 600 2376 2016-09-06T01:47:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0124-915 PBC dipole diptrace.zip 6 601 2377 2016-09-06T01:47:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 0124-868 0 596 2378 2375 2016-09-06T01:48:24Z Admin 1 wikitext text/x-wiki PCB Dipole antenna for 868MHz Designed with Diptrace The antenna is attached to the VNA with a 22.5cm length of RG174. On 868MHz this two half-wavelengths(VF=0.65). The following graph shows the resulting VNA plot for this antenna: [[File:VNA-868-PCB-dipole.jpg]] The above plot is for the dipole tuned for 868MHz. The blue line shows an SWR of 1.1:1 at 867MHz. The dip is much wider than on 433MHz and has a bandwidth of about 51MHz (838 to 889MHz) for an SWR of 1.5:1 or less. The red line shows an impedance of 47.48 Ohms for this frequency, so a fairly close match for the radio. * fed with one wavelength (22.5cm) RG-174 * bandwith below 1.5:1 SWR = 51MHz * each dipole leg is 6.4cm [[File:Test-setup PCB-dipole SDR-Kits.jpg|PCB dipole prototype testing]] During testing (915MHz dipole shown in picture), the antenna was simply were left hanging down, away from any nearby metallic or organic objects. Some general things to keep in mind about these designs: * This is a half-wave dipole and therefore it does not have a 50 ohm feedpoint impedance. You will have some rf coming back to the radio on transmit but due to the rigid and balanced PCB based design and the accurate calibration of the length of the dipole legs using the VNA this will be minimal. * To keep the impedance mismatch from getting worse it is important to only use feedline lengths of (multiples of) a half wavelength (compensated for the appropriate velocity factor) for the frequency of interest. See the picture in this post to see the effects of different feedline lengths: https://lowpowerlab.com/forum/rf-range-antennas-rfm69-library/small-loop-antennas-433-mhz/msg14061/#msg14061 * coax feedline losses are siginificant at these frequencies, use the lowest number of half-wave multiple lengths possible. * I tested these dipoles on 1.6mm thick FR4 substrate PCBs with 1 ounce copper from OSH Park. Feel free to use these designs to manufacture elsewhere but it is not guaranteed that the results will be the same. Heck, even OSH Park could end up supplying you with different materials, but this is what worked for me. The PCB design for this antenna can be ordered directly from OSH Park: https://oshpark.com/profiles/captcha Alternatively, if you wish to make any modifications, you may download the zip file with the gerbers or the Diptrace design files from this site. * [[File:0124-868 v1.0.zip]] Gerbers * [[File:0124-868 PBC dipole diptrace.zip]] Diptrace PCB design 2d81ca2fed0b95b070c00ced6ab8cc7af5b976c4 0124-433 0 590 2379 2372 2016-09-06T01:49:16Z Admin 1 wikitext text/x-wiki PCB Dipole antenna for 433MHz Designed with Diptrace The antenna is attached to the VNA with a 22.5cm length of RG174. On 433MHz this is a half-wavelength (VF=0.65). The following graph shows the resulting VNA plot for this antenna: [[File:VNA-433-PCB-dipole.jpg]] The above plot is for the dipole tuned for 433MHz. The blue line is SWR and shows a dip around 434.8MHz. Close enough for using it on 433MHz. The SWR (top left, in blue) shows a value of 1.11:1 for this frequency. The red line shows an impedance at this frequency of 45.62 Ohms, reasonably close to matching it with the radio which expects 50 ohms. The bandwidth of the antenna with an SWR of 1.5:1 or less is about 15MHz (from 427 to 442MHz). More than sufficient to cater for any variations in operating frequency. * fed with one half wavelength (22.5cm) RG-174 * bandwith below 1.5:1 SWR = 15MHz * each dipole leg is 13.3cm [[File:Test-setup PCB-dipole SDR-Kits.jpg|PCB dipole prototype testing]] During testing (915MHz dipole shown in picture), the antenna was simply were left hanging down, away from any nearby metallic or organic objects. Some general things to keep in mind about these designs: * This is a half-wave dipole and therefore it does not have a 50 ohm feedpoint impedance. You will have some rf coming back to the radio on transmit but due to the rigid and balanced PCB based design and the accurate calibration of the length of the dipole legs using the VNA this will be minimal. * To keep the impedance mismatch from getting worse it is important to only use feedline lengths of (multiples of) a half wavelength (compensated for the appropriate velocity factor) for the frequency of interest. See the picture in this post to see the effects of different feedline lengths: https://lowpowerlab.com/forum/rf-range-antennas-rfm69-library/small-loop-antennas-433-mhz/msg14061/#msg14061 * coax feedline losses are siginificant at these frequencies, use the lowest number of half-wave multiple lengths possible. * I tested these dipoles on 1.6mm thick FR4 substrate PCBs with 1 ounce copper from OSH Park. Feel free to use these designs to manufacture elsewhere but it is not guaranteed that the results will be the same. Heck, even OSH Park could end up supplying you with different materials, but this is what worked for me. The PCB design for this antenna can be ordered directly from OSH Park: https://oshpark.com/profiles/captcha Alternatively, if you wish to make any modifications, you may download the zip file with the gerbers or the Diptrace design files from this site. * [[File:0124-433 v1.0.zip]] Gerbers * [[File:0124-433 PBC dipole diptrace.zip]] Diptrace PCB design 4824540dd2b7c79b8bda6d760dc149c72d81dc84 0124-915 0 598 2380 2371 2016-09-06T01:49:40Z Admin 1 wikitext text/x-wiki PCB Dipole antenna for 915MHz Designed with Diptrace The antenna is attached to the VNA with a 22cm length of RG174. On 9158MHz this close to two half-wavelengths(VF=0.65). The following graph shows the resulting VNA plot for this antenna: [[File:VNA-915-PCB-dipole.jpg]] This plot is for 915MHz and shows an SWR of 1.29:1 for this frequency. The lowest SWR is slightly lower in frequency, but negligible for our purposes. I just left the marker at 915MHz. The antenna has a bandwidth of 43MHz (888 - 931MHz) for an SWR of 1.5:1 or less. The red line shows an impedance of 42.64 Ohms at 915MHz. * fed with one wavelength (22cm) RG-174 * bandwith below 1.5:1 SWR = 43MHz * each dipole leg is 6.0cm [[File:Test-setup PCB-dipole SDR-Kits.jpg|PCB dipole prototype testing]] During testing (915MHz dipole shown in picture), the antenna was simply were left hanging down, away from any nearby metallic or organic objects. Some general things to keep in mind about these designs: * This is a half-wave dipole and therefore it does not have a 50 ohm feedpoint impedance. You will have some rf coming back to the radio on transmit but due to the rigid and balanced PCB based design and the accurate calibration of the length of the dipole legs using the VNA this will be minimal. * To keep the impedance mismatch from getting worse it is important to only use feedline lengths of (multiples of) a half wavelength (compensated for the appropriate velocity factor) for the frequency of interest. See the picture in this post to see the effects of different feedline lengths: https://lowpowerlab.com/forum/rf-range-antennas-rfm69-library/small-loop-antennas-433-mhz/msg14061/#msg14061 * coax feedline losses are siginificant at these frequencies, use the lowest number of half-wave multiple lengths possible. * I tested these dipoles on 1.6mm thick FR4 substrate PCBs with 1 ounce copper from OSH Park. Feel free to use these designs to manufacture elsewhere but it is not guaranteed that the results will be the same. Heck, even OSH Park could end up supplying you with different materials, but this is what worked for me. The PCB design for this antenna can be ordered directly from OSH Park: https://oshpark.com/profiles/captcha Alternatively, if you wish to make any modifications, you may download the zip file with the gerbers or the Diptrace design files from this site. * [[File:0124-915 v1.0.zip]] Gerbers * [[File:0124-915 PBC dipole diptrace.zip]] Diptrace PCB design 555bc927b4a56b732c4cf9a9422ca25c8bad6661 PCB designs 0 87 2381 2366 2016-09-06T01:50:22Z Admin 1 Admin moved page [[Pending PCB manufacturing]] to [[PCB designs]] wikitext text/x-wiki Current (and old) PCB related projects: {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Project</b> |style="background-color:#f2f2f2;"|<b>Description</b> |style="background-color:#f2f2f2;"|<b>Schematic Design</b> |style="background-color:#f2f2f2;"|<b>PCB Design</b> |style="background-color:#f2f2f2;"|<b>Gerbers</b> |style="background-color:#f2f2f2;"|<b>Comments</b> |- |[[mcu_0050-handheld-tempsensor]] |Handheld Tempsensor |style="color:green"|finished |style="color:green"|finished |style="color:green"|finished |Gerbers: [[File:0050-gerbers-v1.0.zip]] |- |[[mcu_0051-lcd-i2c-board]] |I2C LCD Board |style="color:green"|finished |style="color:green"|finished |style="color:green"|finished |Gerbers: [[File:0051-gerbers.zip]] |- |[[mcu_0053-AVR-Fuse-Resetter]] |AVR Fuse Resetter |style="color:black"|90% |style="color:black"|70% |style="color:red"|incomplete |x1 join nets in schematic, use ZIF socket if possible, use ic sockets in pcb |- |[[mcu_0055-rs232-tempsensor]] |RS232 temp sensor add-on board |style="color:green"|finished |style="color:green"|finished |style="color:green"|finished |Gerbers: [[File:0055-gerbers-v1.0.zip]] |- |[[mcu_0056-nokia-48x84-i2c-board]] |small display board |style="color:red"|incomplete |style="color:red"|incomplete |style="color:red"|incomplete |not started yet |- |[[mcu_0057-lcd-i2c-eval-board]] |LCD Development Board with I2C |style="color:black"|40% |style="color:black"|40% |style="color:red"|incomplete |check I2C lines, design headers, add texts |- |. |RC Autopilot |style="color:red"|incomplete |style="color:red"|incomplete |style="color:red"|incomplete |core developed on Arduino Pro Mini, base board design exists only in breadboard |- |[[mcu_0058-ATtiny85-eval-board]] |small ATtiny85 eval board |style="color:red"|incomplete |style="color:red"|incomplete |style="color:red"|incomplete |small eval board with work area, power regulator, DC socket, a switch and a LED |- |[[mcu_0059-ATtiny84-eval-board]] |small ATtiny84 eval board |style="color:black"|90% |style="color:black"|80% |style="color:red"|incomplete |small eval board with work area, power regulator, DC socket, a switch and a LED |- |[[mcu_0060-Voltage-data-logger]] |Voltage data logger |style="color:red"|incomplete |style="color:red"|incomplete |style="color:red"|incomplete |depends on wireless transmission (ir or xbee) and micro sdcard storage |- |[[mcu_0061-heart-rate-monitor]] |Heart rate monitor |style="color:red"|incomplete |style="color:red"|incomplete |style="color:red"|incomplete |need to get hardware to work on test board first |- |[[Mcu 0062-LCD-48x84-RC-Enclosure-top-pcb]] |48x84 Nokia LCD board |style="color:green"|finished |style="color:green"|finished |style="color:green"|finished |Gerbers: [[File:0062-gerbers-v1.0.zip]] |- |[[0124-433]] |PCB Dipole antenna for 433MHz |style="color:green"|finished |style="color:green"|finished |style="color:green"|finished |Gerbers: [[File:0124-433 v1.0.zip]] |- |[[0124-868]] |PCB Dipole antenna for 868MHz |style="color:green"|finished |style="color:green"|finished |style="color:green"|finished |Gerbers: [[File:0124-868 v1.0.zip]] |- |[[0124-915]] |PCB Dipole antenna for 915MHz |style="color:green"|finished |style="color:green"|finished |style="color:green"|finished |Gerbers: [[File:0124-915 v1.0.zip]] |} My first order was placed with BatchPCB. For me, this is a convenient and cheap way to obtain professional pcb's in low quantities. Feel free to drop me a line on alternative pcb manufacturers that can also do low-cost and low-quantity pcb's. c458515d1304ebcc463401f50328c1cda3beb9e2 Pending PCB manufacturing 0 602 2382 2016-09-06T01:50:23Z Admin 1 Admin moved page [[Pending PCB manufacturing]] to [[PCB designs]] wikitext text/x-wiki #REDIRECT [[PCB designs]] c6745978695753c32ae3573db0338714cef67344 File:Breadboard1-0-x.zip 6 604 2388 2016-09-16T12:27:41Z Admin 1 breadboard file from ArduinoToBreadboard wikitext text/x-wiki breadboard file from ArduinoToBreadboard 21ee27d1a53fc6b34a9a4734eed35191c46dce42 File:Pixie-qrp-cw-trx 01.jpg 6 606 2405 2403 2016-10-05T11:35:02Z Admin 1 Admin uploaded a new version of &quot;[[File:Pixie-qrp-cw-trx 01.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pixie-qrp-cw-trx 02.jpg 6 608 2406 2016-10-05T11:41:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:PIXIE(120322).PCB.jpg 6 609 2413 2016-10-08T11:31:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Pixie2 0 607 2416 2415 2016-10-11T02:27:27Z Admin 1 wikitext text/x-wiki I bought this radio off eBay in 2015 and it's very low power and has some pros and cons: [[File:Pixie-qrp-cw-trx 01.jpg]] Pros: * Crystal controlled * Cheap, easy to build * low power usage (standby current about 20mA @ 12V, 100mA on transmit) * On-board LM386 audio amplifier (drives low impedance speaker or headphones) Cons: * Only capable of listening/transmitting on ONE frequency * No sidetone when keying * Loud DC-bumps (popping/clicking sound) when keying * only CW, no AM or SSB Some details: The Pixie 2 is a tiny rig, with a standard two-transmittor transmitter. It's a Colpitts oscillator, left running and a keyed Power Amplifier. There is no external mixer used to feed the audio amplifier. Instead, the mixing is done at the final amplifier itself with the resulting audio taken off the emitter. There is no Receiver Incremental Tuning (RIT). * Power input: 9V - 12V (Q2, the S8050 gets hot with too much input voltage!) * Power consumption: 10mA RX, 100mA TX (@ 9V) * TX Power: 1.2W @ 12V, 0.8W @ 9V * QSK (Full break-in) CW Schematic: [[File:Pixie-qrp-cw-trx 02.jpg]] Unpopulated PCB: [[File:PIXIE(120322).PCB.jpg]] Some history about the Pixie transceiver. http://www.gqrp.com/The_Sprat_Pixie_File.pdf 4946b3e40e5a6f8bd32b1e231c78fb2cf6292a72 File:Breadboard-1-6-x.zip 6 610 2417 2016-11-12T11:24:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:IV-Curve 6V 35mA-PV-panel.jpg 6 611 2419 2016-11-19T00:36:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:IV-Curve 6V 140mA-PV-panel.jpg 6 612 2421 2016-11-19T00:36:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:IV-Curve 1.6V 18mA-PV-panel.jpg 6 613 2424 2016-11-19T02:27:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:IV-Curve 4V 250mA-PV-panel.jpg 6 614 2426 2016-11-19T02:28:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Solarpanels 0 535 2429 2428 2016-11-19T02:31:35Z Admin 1 wikitext text/x-wiki These days a lot of small solar panels can be easily and cheaply acquired from various sources. To find out which of these panels I could use for my projects I decided to hook them up to my [[Mcu_0084-voltage-datalogger|voltage-datalogger]] and see how they perform on a sunny day. Here is an overview of the panels I tested: [[File:4-small-solar-panels.png]] On my testing day, around noon I ran my datalogger for about 15 minutes on each panel. The results are shown below: [[File:Datalogger 4-small-solar-panels open-circuit-voltage.png]] During testing the clouds were mostly gone, except when I was testing panel B. The outside temperature was around 27 degrees Celsius. I also put a temperature sensor underneath the panels and measured about 55 degrees C in the shade. [[File:Solar-test-setup.jpg]] ===Solar Panel A=== * Dimensions: 2.5cm x 2.5cm * Open-circuit voltage: 1.6V * Short-circuit current: 18mA [[File:IV-Curve 1.6V 18mA-PV-panel.jpg]] These panels are commonly found in solar powered garden-lights. I was able to get some for AU$2 each and they contained a 100mAh NiMH battery as well as a small charging circuit based on the yX805 chip. The panels are covered with a glass top layer and have no circuit board. The copper terminals are printed on the bottom of the crystalline material so it's very delicate. ===Solar Panel B=== * Dimensions: 6cm x 6cm * Open-circuit voltage: 6V * Short-circuit current: 35mA [[File:IV-Curve 6V 35mA-PV-panel.jpg]] These panels are printed on a circuit board and are therefore easy to solder. The top layer is some kind of transparent epoxy. The voltage curve in the graph above shows some fluctuations due to clouds in front of the sun when testing. ===Solar Panel C=== * Dimensions: 12cm x 6cm * Open-circuit voltage: 4V * Short-circuit current: 250mA [[File:IV-Curve 4V 250mA-PV-panel.jpg]] These panels are printed on a circuit board and are therefore easy to solder. The top layer is some kind of transparent epoxy. ===Solar Panel D=== * Dimensions: 9.9cm x 6.9cm * Open-circuit voltage: 5.5V * Short-circuit current: 140mA [[File:IV-Curve 6V 140mA-PV-panel.jpg]] These panels are printed on a circuit board and are therefore easy to solder. The top layer is some kind of transparent epoxy. 611cbe25255aa4a6634bca17056aa897d3abb855 File:Forty-9er-topview.jpg 6 616 2432 2016-12-09T22:35:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:49erOrigMnl.pdf 6 617 2434 2016-12-09T22:44:19Z Admin 1 NorCal QRP Club Forty-9er wikitext text/x-wiki NorCal QRP Club Forty-9er 42ce6f452efd57a5185b2c21c1dfa0dcdee8a4ec File:Forty-9er schematic.jpg 6 618 2436 2016-12-09T23:58:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Forty-9er pcb top.jpg 6 619 2438 2016-12-09T23:59:28Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Forty-9er pcb bottom.jpg 6 620 2439 2016-12-10T00:00:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BD139.jpg 6 621 2441 2016-12-10T00:04:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NEC-2SD882-datasheet.pdf 6 622 2444 2016-12-10T00:11:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Forty-9er 0 615 2447 2446 2016-12-10T00:27:40Z Admin 1 wikitext text/x-wiki The forty-9er is an improved design over the Pixie2. It has two crystals, one for the rx and one for the tx frequency. RX power consumption is around 23mA @ 12V Output power is around 2 to 3 Watts. [[File:Forty-9er-topview.jpg]] [[File:Forty-9er pcb top.jpg]] [[File:Forty-9er pcb bottom.jpg]] [[File:Forty-9er schematic.jpg|200px|thumb|none|Forty-9er Schematic]] Description of the original Norcal Forty 9er [[File:49erOrigMnl.pdf]] The Final Power Amplifier that is shipped with this kit is the NEC D882 NPN Transistor. datasheet: [[File:NEC-2SD882-datasheet.pdf]] Apparently, the datasheet lists this part as suitable for a 3W audio amplifier but it has an Ft of 90MHz. An initial check revealed that the power output was only 600mW so I decided to replace it with a BD139 which has an Ft of 190MHz. It also has the same footprint and pinout so it is a drop-in replacement for the D882. [[File:BD139.jpg]] After fitting this transistor the power output was about 1W. 701abf8428b292fa68931736c4bbf80db6b692b5 File:Compromise-impedances.jpg 6 625 2457 2016-12-14T04:10:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Why 50 Ohms 0 626 2458 2016-12-14T04:10:52Z Admin 1 Created page with "The answer can be shown in the graph below. This was produced by two researchers, Lloyd Espenscheid and Herman Affel, working for Bell Labs in 1929. They were going to send R..." wikitext text/x-wiki The answer can be shown in the graph below. This was produced by two researchers, Lloyd Espenscheid and Herman Affel, working for Bell Labs in 1929. They were going to send RF signals (4 MHz) for hundred of miles carrying a thousand telephone calls. They needed a cable that would carry high voltage and high power. In the graph below, you can see the ideal rating for each. For high voltage, the perfect impedance is 60 ohms. For high power, the perfect impedance is 30 ohms. This means, clearly, that there is NO perfect impedance to do both. What they ended up with was a compromise number, and that number was 50 ohms. [[File:Compromise-impedances.jpg]] 56bac61749b3a884e98bba7a73aa6f8066e55e5c File:Gamma-match.jpg 6 624 2468 2467 2016-12-14T10:48:07Z Admin 1 Admin uploaded a new version of &quot;[[File:Gamma-match.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Delta-match.jpg 6 627 2469 2016-12-14T10:51:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Hairpin-match.jpg 6 628 2471 2016-12-14T11:04:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Stub-match.jpg 6 629 2478 2016-12-14T11:12:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Omega-match.jpg 6 630 2480 2016-12-14T11:16:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Z-match.jpg 6 631 2483 2016-12-14T11:23:47Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:T-match.png 6 632 2485 2016-12-14T11:26:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:L-match.jpg 6 633 2487 2016-12-14T11:29:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pi-match.jpg 6 634 2489 2016-12-14T11:32:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:S-match.jpg 6 635 2491 2016-12-14T11:34:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Pawsey-stub.jpg 6 636 2493 2016-12-14T11:40:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Coax-balun.jpg 6 637 2495 2016-12-14T11:42:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Split-coax-balun.jpg 6 638 2497 2016-12-14T11:48:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Baluns 0 640 2539 2016-12-15T03:09:58Z Admin 1 Created page with " For related information on the subject, see also our articles on [[common mode interference]] and [[impedance matching]]. ===Baluns=== The balun is a device (often a tra..." wikitext text/x-wiki For related information on the subject, see also our articles on [[common mode interference]] and [[impedance matching]]. ===Baluns=== The balun is a device (often a transformer) that can: * match a balanced antenna (dipole) to an unbalanced feedline (coax) * match an unbalanced antenna (quarter-wave vertical) to a balanced feedline * electrically isolate the feedline * choke common-mode currents (caused by unbalanced antennas) Although a balun can quench common-mode currents, it doesn't necessarily transform impedances. Tuned Stub Folded Balun [[File:Pawsey-stub.jpg|thumb|none|250px|Pawsey Stub]] [[File:Coax-balun.jpg|thumb|none|250px|Coax balun]] [[File:Split-coax-balun.jpg|thumb|none|250px|Split coax balun]] 715c5ee79425ec3804e4fb4176706cd4e49c60ff File:Random-adc-values.png 6 641 2552 2016-12-15T21:45:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Last-15-rolling-avg.png 6 642 2553 2016-12-15T21:47:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Common mode interference 0 639 2562 2561 2016-12-15T23:58:23Z Admin 1 wikitext text/x-wiki In transmitters and antenna systems, common mode interference needs to be properly addressed as they can be the source of all kinds of interference to their own or nearby electronics. For related information on the subject, see also our article on [[impedance matching]] and [[baluns]]. ===Why we don't want Common Mode currents=== * high voltage at radio can cause 'RF in the shack', 'hot' microphones, RF burns * may cause RFI to nearby devices (distorted audio, upsetting cw keyers, fluorescent lamps flicker) * RF over the feedline will also re-radiate and can interfere with nearby antenna elements (e.g. in a Yagi) and disturb the antenna's radiation pattern. * A system that radiates rf from the feedline is also susceptible to receiving rf from other signal sources, causing additional noise in the system. ===Causes of Common-mode currents=== Common Mode Currents can be caused by: * imbalanced antenna * feed point imbalance to balance transition * running the feedline through the antenna's near-field * other nearby noise sources * Coax shield attenuation * Ground loops (improper grounding) * domestic appliances fed by unshielded power cables ===What causes an antenna to not be balanced?=== * nearby trees and building structures * difference in radiating element lengths * differences in height above ground of the radiating elements The imbalance can also occur in the feedline and may be caused by: * feedline design (e.g. coax) * distance of nearby buildings to one side of a twin-lead feedline So in short: {| class="wikitable" |+Common Mode Currents |- |Cause |Effect |Symptoms |- |Imbalances in the form of: nearby trees and buildings to an antenna, different antenna element lengths, difference in height above ground of antenna elements, nearby metallic objects to feedline, inherent feedline properties, ground loops |common mode currents |RF in the Shack, re-radiation of rf and can cause RFI, interfere with antenna radiation pattern, pick up unwanted rf and create additional noise |} ===Minimising Common Mode currents=== If we cannot alter the amount of generated common mode currents we have a few methods that in varying degrees of success can minimise the effects of common mode currents: * chokes * isolation (1:1 baluns) * grounding * redistribute the effects over the transmission line conductors 221eba0b777cb575ce78214dd06c2437fed8acfd File:Coax-closeup.jpg 6 643 2563 2016-12-16T00:17:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Twinlead-closeup.jpg 6 644 2564 2016-12-16T00:17:55Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Impedance matching 0 623 2571 2570 2016-12-16T03:14:44Z Admin 1 wikitext text/x-wiki Most RF transmitters nowadays are designed to work with a 50 Ohms load impedance. (Read here: [[Why 50 Ohms]]? ) Many antennas however do not have a 50 Ohms input impedance, so the need for Matching arises. For related information on the subject, see also our articles on [[common mode interference]] and [[baluns]]. ===Why do we need/want impedance matching?=== * Maximum power transfer happens when the source (transmitter) impedance and the load (antenna) impedances are matched. If there is a feedline in between then the feedline needs to be matched as well. * Impedance mismatches will cause equal-and-opposite (differential-mode) currents going back and forth in the feedline. This may damage the radio. * Built-in protection circuits in radios prevent delivering maximum output power if a severe enough mismatch is detected (e.g. higher than SWR > 2:1). ===Voltage Standing Wave Ratio (VSWR, or just SWR)=== SWR is be caused by an impedance mismatch between source and load. Common areas where the impedance might not match the source or the feedline: * antenna feed point (e.g. dipole is 73 Ohms, quarter-wave vertical on ground is 36 Ohms) * type of feedline (coax is usually 50 or 70 Ohms, twin-lead can be 300 or 450 Ohms) * routing tracks over a circuit board (vias, corners, thick-to-thin transitions) SWR is an indication of how much of the transmitted power to the antenna is reflected due to impedance mismatch and comes back to the radio. SWR is entirely contained inside coax or on the conductors or twinlead. [[File:Coax-closeup.jpg|thumb|none|200px|Coax close up]] [[File:Twinlead-closeup.jpg|thumb|none|200px|Twinlead close up]] To give you an idea what the various SWR numbers actually mean in terms of reflected power. {| class="wikitable" |+VSWR and Reflected Power |- |VSWR |Power Out |Power Reflected |- |1:1 |100W |0W |- |1.5:1 |100W |3.9W |- |2:1 |100W |11.1W |- |2.5:1 |100W |18.4W |- |3:1 |100W |25W |- |3.5:1 |100W |31W |- |4:1 |100W |36W |} ===Why we don't want high SWR=== * cable losses could add up significantly and cause output signal attenuation * high voltage at radio can cause 'RF in the shack', 'hot' microphones * RFI to nearby devices due to over-stressing radio final power amplifiers and protection circuits So in short: {| class="wikitable" |+High (Voltage) Standing Wave Ratio |- |Cause |Effect |Symptoms |- |Impedance mismatch due to: inherent antenna design feedline not matched to antenna or radio antenna not matched to feedline |SWR |cable losses due to attenuation rf in the shack stressing power amplifier and protection circuits and cause RFI less than maximum power transfer to the antenna |} ===Various ways of matching feedline to the antenna=== [[File:Gamma-match.jpg|thumb|none|250px|Gamma Match]] More info: http://myweb.tiscali.co.uk/g8hqp/radio/gammamatch.pdf T-Match (basically a Gamma match on either side of the driven element) [[File:Delta-match.jpg|thumb|none|250px|Delta Match]] [[File:Hairpin-match.jpg|thumb|none|250px|Hairpin Match]] [[File:Stub-match.jpg|thumb|none|250px|Stub Match]] [[File:Omega-match.jpg|thumb|none|250px|Omega Match]] The device that matches the radio to the feedline is often called an Antenna Tuner or ATU (Antenna Tuning Unit), but this name is slightly incorrect as it doesn't actually tune the antenna; it adds capacitance or inductance to whatever is connected to the Antenna port of the Tuner to cancel out any reactance. If matching the feedline to the antenna is not done at the antenna feed point it is still possible to match the radio to the feedline. This is often done for practical reasons in that a tuning network can be situated close to the radio (sometimes even on the same circuit board) and is away from the harsher outside environment where the antenna is. The biggest drawback of course is that any mismatch between the feedline and the antenna is propagated all the way down to the radio until it reaches the antenna tuner. This is less of a problem with lower frequencies (e.g. < 100MHz), but at higher frequencies there may be significant attenuation of the signal simply due to the length of the feedline. ===Transmatch (Antenna Tuner) designs=== [[File:T-match.png|thumb|none|250px|T-Match]] [[File:Z-match.jpg|thumb|none|250px|Z-Match]] [[File:L-match.jpg|thumb|none|250px|L-Match]] [[File:Pi-match.jpg|thumb|none|250px|Pi Match]] [[File:S-match.jpg|thumb|none|250px|S-Match]] Some myths dispelled: * The length of feedline does not alter the SWR (apart from making it less due to losses in longer feedlines). Feedline length DOES affect impedance. * Antenna Tuners do not need to be encased in metal enclosures as there are no harmonics or non-linear products generated * SWR does not radiate off the feedline * Common mode currents on the feedline can still occur in a 1:1 SWR antenna system 110f45c5b086dd1918adc0dc0695e5703747ca9d File:MCP73832 open-drain.jpg 6 646 2576 2016-12-16T09:19:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MCP73831 tri-state.jpg 6 647 2578 2016-12-16T09:20:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MCP73833 status-pin.jpg 6 648 2581 2016-12-16T09:28:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Open-drain-output.jpg 6 649 2587 2584 2016-12-16T09:59:13Z Admin 1 Admin uploaded a new version of &quot;[[File:Open-drain-output.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MCP73831 status-pin.jpg 6 651 2592 2016-12-16T10:29:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:MCP73832 status-pin.jpg 6 652 2593 2016-12-16T10:29:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Open-drain-output-with-external-pullup-and-led.jpg 6 653 2597 2016-12-16T10:55:42Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Open-drain-output-with-internal-pullup-and-led.jpg 6 654 2599 2016-12-16T10:57:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Scarlet-honeyeater.jpg 6 655 2609 2016-12-17T05:06:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blue-faced-honeyeater.jpg 6 657 2612 2016-12-17T05:11:37Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0118-PCB Versions 0.1 and 0.2.jpg 6 659 2618 2016-12-25T09:22:57Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:MsgBox 10 660 2625 2624 2016-12-29T10:42:34Z Admin 1 wikitext text/x-wiki <table class="msgbox" border=1 bgcolor="#E1E1E1" style="width:20em; font-size:90%; text-align:left; margin:10px; border-spacing:5px 5px; border: 1px #c0c0c0 solid;"> <tr> <td bgcolor="#E1E1E1" style="text-align:center;">Tip</td> <td bgcolor="#E1E1E1" style="text-align:center;">{{{description}}}</td> </tr> </table> 71ef8ea1764aeaa81b0d199cd95fb32eb46dda94 Tristatelogic-vs-opendrain 0 645 2626 2623 2016-12-29T10:43:54Z Admin 1 wikitext text/x-wiki The datasheet for the MCP73831/2 LiPo charge controllers shows that the chip can be ordered with the STATUS pin preconfigured as either Tri-State Logic or Open-Drain. So what is the difference and why would you want one over the other? ===MCP73832 (Open Drain)=== Consider the following: [[File:Open-drain-output.jpg]] The dotted box is the charge controller and the (N-Channel) FET controls the STAT pin going to the outside world. As you can see the Drain pin of the FET is not connected to VCC. Therefore, the FET can only be in one of two states; when the Gate is ON, the Drain is pulled to Ground, when the Gate is OFF, the Drain is floating. The floating state becomes useful when we use an external pull-up resistor. This way when the Gate is OFF, the Drain is pulled up by the resistor to VCC. If we want to add an LED to show the charge status with the open drain charge controller we need to have a look at the available signals for the MCP73832 from the datasheet: -- Table 5-1 summarizes the state of the status output during a charge cycle. [[File:MCP73832 status-pin.jpg]] -- As you can see the available signals are only: * High impedance (High-Z) when the Gate is OFF (and Drain is floating) * Low impedance (Low-Z) when the Gate is ON (and Drain is actively pulled to Ground) If we were to place an LED to Ground in series with R1 like so: [[File:Open-drain-output-with-external-pullup-and-led.jpg|thumb|none|300px|Led through External Pull-up Resistor]] ..the LED would turn on when the Gate is ON (Closing the path from Drain to Ground) In this configuration, and according to the datasheet, the LED would turn on: * When the Charge Controller is in battery pre-conditioning mode * Charging the battery in constant-current mode * topping up the battery in constant-voltage mode When the battery is full, the 'Charge Complete' status turns the Gate OFF and the path to Ground as seen from the Drain is disconnected and the LED Cathode is floating at VCC, which effectively turns the LED off. A little more on the pull-up resistor when we're talking about microcontrollers. Most microcontrollers have an internal Pull-up Resistor and can source (some) current to power external circuitry like a LED. The schematic will then look something like this: [[File:Open-drain-output-with-internal-pullup-and-led.jpg|thumb|none|300px|Internal Pull-up Resistor]] ===MCP73831 (Tri-State Logic)=== Now let's have a look at the tri-state function of the STAT pin. [[File:MCP73831 status-pin.jpg]] 3.3 Charge Status Output (STAT) STAT is an output for connection to an LED for charge status indication. Alternatively, a pull-up resistor can be applied for interfacing to a host microcontroller. STAT is a tri-state logic output on the MCP73831 and an open-drain output on the MCP73832. The charge charge status output can be used to illuminate 1, 2, or tri-color LEDs. Optionally, the charge status output can be used as an interface to a host microcontroller. 5.2.1 STATUS INDICATOR (STAT) The charge status output of the MCP73831 has three different states: High (H), Low (L), and High- Impedance (High Z). The charge status output of the MCP73832 is open-drain. It has two different states: Low (L) and High-Impedance (High Z). The charge sta- tus output can be used to illuminate one, two or tri-color LEDs. Optionally, the charge status output can be used as an interface to a host microcontroller. {{MsgBox | type = tip | description = No proper images yet for the tri-state and open drain logic yet }} This is what Tri-State logic looks like: [[File:MCP73831-tri-state.jpg|thumb|none|250px|Tri-State]] And this is an Open Drain configuration: [[File:MCP73832-open-drain.jpg|thumb|none|250px|Open Drain]] Open Drain has two states, High-Z (high resistance) and Low-Z (low resistance). To use a common anode tricolour LED (two LED's with their anodes connected, not bicolour): * Anode was connected to the input power supply * Green cathode connected to ground with a current limiting resistor. * Red cathode to the STAT pin. No chip power supply: LED off Charging - yellow Done - Green (But it will also light up green when no battery is present) You could implement a 'red - charging, green - done' with same LED, but with an extra NPN transistor on the green cathode. So when the STAT is low, transistor is off, but pulls the red cathode low. When STAT is high, transistor on, green LED on, red off. Sources: * http://ww1.microchip.com/downloads/en/DeviceDoc/20001984g.pdf * http://ww1.microchip.com/downloads/en/DeviceDoc/51596a.pdf 2d42c14d041f26c669653bac5738ecde2a2fc144 File:Fiddler-beetle.jpg 6 661 2627 2016-12-31T02:02:53Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Space-helmet-lights.jpg 6 662 2630 2017-01-02T10:23:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0126-iambic-keyer-pcb.jpg 6 663 2632 2017-01-10T21:20:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Ame dcp paddle.jpg 6 665 2635 2017-01-10T21:24:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0126 Iambic Keyer gerbers.zip 6 667 2640 2017-01-10T21:41:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:DipTrace Schematic - 0126 iambic keyer.png 6 669 2642 2017-01-10T21:45:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Wikipost:Current events 4 672 2652 2017-01-11T00:20:38Z Admin 1 Created page with " Amateur Radio Contest calendar for 2017: [[2017_VK_Contest_Dates]]" wikitext text/x-wiki Amateur Radio Contest calendar for 2017: [[2017_VK_Contest_Dates]] 3acfda84a493cbe93013e652c9f6d6a566f38f84 File:0126-iambic-keyer-oshpark.jpg 6 666 2653 2637 2017-01-11T00:22:49Z Admin 1 Admin uploaded a new version of &quot;[[File:0126-iambic-keyer-oshpark.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0126 iambic keyer.zip 6 670 2656 2655 2017-01-11T00:42:33Z Admin 1 Admin uploaded a new version of &quot;[[File:0126 iambic keyer.zip]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0126-iambic-keyer-pcb-built side.jpg 6 673 2664 2017-01-11T21:08:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Willie-wagtail.jpg 6 674 2669 2017-01-15T07:14:33Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Raspberry-pi-pinout.jpg 6 675 2672 2017-01-20T22:23:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 GPIO pin on the RPi to trigger PTT 0 444 2673 2671 2017-01-20T22:23:42Z Admin 1 wikitext text/x-wiki When using the Raspberry Pi for Packet Radio or APRS it is essential to bring the radio into transmit mode before sending any packets. One hack that works with varying degrees of success is to use the radio's VOX (Voice Operated Switch) if it has one. The idea being that dummy packets that are sent before the actual data are used to trigger the vox and we then hope that the radio goes into transmit just in time before the actual data is sent. With vox sensitivity on the radio and TXDELAY settings in /etc/ax25/soundmodem we have some variables to play with but it remains a bit messy. [[File:IC-207H.jpg]] The preferred method is to key the radio using a dedicated PTT line. This is normally achieved by putting PTT to GND and the radio goes into transmit. This connection of PTT to GND is usually done inside a hand-held microphone by the operator. For automated operation such as Packet Radio and APRS where packets are sent at the control of the computer an alternative method is required. With Serially (RS-232) connected TNC's it is possible to use the RTS line on the serial port as a PTT trigger. This line will go from HIGH to LOW when a packet is being transmitted over the serial port and will go from LOW to HIGH when the packet has finished transmitting over the serial port. We can use this line to trigger the PTT of a radio. [[File:Raspberry-pi-pinout.jpg]] Before we can access this RTS signal on the Raspberry Pi we need to tell it to slightly shuffle the GPIO pinout a bit. The GPIO header on the RPi has several 'mappings' which tell which pin what to do (see http://elinux.org/RPi_BCM2835_GPIOs). We can change the function of GPIO pins by changing the mapping for those pins. The chip controlling the GPIO on the RPi knows of three pre-defined mappings. Although the mapping schemes are fixed, there is one mapping which brings out RTS of the on-board serial port of the RPi to a GPIO pin. For the (older) Rev2 Model A and B RPi's this GPIO pin is on the P5 header, for the A+ and B+ models the GPIO pin is on the main header. Unfortunately the Raspbian software does not come with a program to easily modify the GPIO pin mapping. For that we need to make use of a third-party piece of software from Github user rewolff called bw_rpi_tools. Full source code and instructions can be found here: https://github.com/rewolff/bw_rpi_tools if one does not already have git support installed, that must be done upfront: # might be required sudo apt-get update # get git support sudo apt-get install git-core # …follow the prompt To use the IO pins we first need to “free” the serial port for our usage. The default configuration of the linux image uses the built in serial port to dump kernel messages and as a way to log into your raspi. From /boot/cmdline.txt we need to remove the following options: <pre> console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 </pre> We also need to stop the system to spin up a terminal on the serial port. For this we put the following statement in /etc/inittab into comment (add # in front of the line): <pre> #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 </pre> OK, the serial port is ours, but we still need a tool to switch the GPIO assignment. In the Makefile change the line: cp $(BINARIES) $(SCRIPTS) $(BINDIR) to cp $(BINARIES) $(BINDIR) before the make install type: make followed by the command shown above: sudo make install If you now look into the (default) install directory /usr/local/bin you will find: a) the file: gpio_list b) a soft link: gpio_setfunc -> /usr/local/bin/gpio_list and some more soft links. <pre> # as pi user, cd /home/pi mkdir rpi-tools cd rpi-tools/ # if you have not yet installed git, this must be done upfront # see comments section below on how to do this git clone https://github.com/rewolff/bw_rpi_tools.git cd bw_rpi_tools/gpio # depending on the version or status of the tools you might need to fix the Makefile # see comments section below make sudo make install </pre> I found that if you goto /rpi-tools/bw_rpi_tools/bw_tool and do a make there you can then get the sudo make install to partially work enough to get the gpio_list working -No luck yet for the setfunc Blatantly copied from: https://dl8scu.wordpress.com/2013/02/10/are-you-lucky-no-usb-to-serial-converter-needed/ Once the software is installed it is simply a matter of setting the GPIO mapping for the desired pins at boot-up of the system. I prefer to place the following lines inside /etc/rc.local <pre> # change GPIO pins 30 and 31 to mapping ALT3 # See: http://elinux.org/RPi_BCM2835_GPIOs # See: https://github.com/rewolff/bw_rpi_tools /usr/local/bin/gpio_setfunc 30 ALT3 /usr/local/bin/gpio_setfunc 31 ALT3 </pre> Below are two schematics that show how to interface to different handheld radios to the RPi with the GPIO PTT method. Please note that many radios will have different pinouts so it is important to check the correct way of keying PTT before you try anything out. ===Baofeng UV-5R to RPi with GPIO PTT=== This image shows: * Where to find the RTS pin on the GPIO headers for the various RPi Models * The pinout of the plugs for the Baofeng UV-5R handheld transceiver * A schematic for inverting the logic signal of the RTS pin so it can be used to switch PTT to GND using a P-Channel FET [[File:UV5R-PTT-pinout.jpg|200px|thumb|none|Connection Schematic for UV-5R]] ===Icom IC-P2AT to RPi with GPIO PTT=== This image shows: * Where to find the RTS pin on the GPIO headers for the various RPi Models * The pinout of the plugs for the Icom IC-P2AT handheld transceiver * A schematic for inverting the logic signal of the RTS pin so it can be used to switch PTT to GND using a P-Channel FET [[File:P2AT-PTT-pinout.jpg|200px|thumb|none|Connection Schematic for IC-P2AT]] 1b536b3094c7e806a69d968d0d4a72889da18e1e File:Sleeping-bats.jpeg 6 677 2676 2017-01-27T00:26:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 ATMega328 WDT sleep 0 676 2677 2675 2017-01-27T00:26:21Z Admin 1 wikitext text/x-wiki For my wireless sensor nodes I have been using the ATmega328P-AU (TQFP) microcontrollers with great success. However, I wanted to make sure that I can get the power consumption down to a minimum whilst in sleep mode as these units will run off a 100mAh LiPo battery. Needless to say, the runtime of the device greatly depends on how low we can get the power consumption when the unit is in sleep mode. [[File:Sleeping-bats.jpeg]] The ATMega328 chip is the same as used in the Arduino Uno and should be compatible with the Duemilanove as only the form factor differs (TQFP vs DIP). With the sketch loaded into the mcu I was able to get the power consumption down to around 5uA. Brown-out detection is disabled, but if you need that for your project, expect the consumption to go up to about 23uA. <pre> /* ATMega328 (same as in Arduino Duemilanove/Uno) Watchdog-timer sleep sketch Current in sleep mode: ~5uA */ #include <avr/interrupt.h> #include <avr/sleep.h> #include <avr/wdt.h> #define LED 13 // the setup function runs once when you press reset or power the board void setup() { // initialize LED pin as an output. pinMode(LED, OUTPUT); digitalWrite(LED,LOW); } // the loop function runs over and over again forever void loop() { digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW //enter sleep mode system_sleep(); } //initialize watchdog void setup_watchdog(int ii) { // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms // 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec uint8_t bb; if (ii > 9 ) ii=9; bb=ii & 7; if (ii > 7) bb|= (1<<5); bb|= (1<<WDCE); MCUSR &= ~(1<<WDRF); // start timed sequence WDTCSR |= (1<<WDCE) | (1<<WDE); // set new watchdog timeout value WDTCSR = bb; WDTCSR |= _BV(WDIE); } // system wakes up when watchdog is timed out void system_sleep() { ADCSRA = 0; // switch Analog to Digitalconverter OFF setup_watchdog(9); // approximately 8 seconds sleep /* The 5 different modes are: SLEEP_MODE_IDLE -the least power savings SLEEP_MODE_ADC SLEEP_MODE_PWR_SAVE SLEEP_MODE_STANDBY SLEEP_MODE_PWR_DOWN -the most power savings */ set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here noInterrupts (); // timed sequence follows sleep_enable(); // turn off brown-out enable in software MCUCR = bit (BODS) | bit (BODSE); // turn on brown-out enable select MCUCR = bit (BODS); // this must be done within 4 clock cycles of above interrupts (); // guarantees next instruction executed sleep_cpu (); // sleep within 3 clock cycles of above sleep_disable(); // System continues execution here when watchdog timed out ADCSRA = 1; // switch Analog to Digitalconverter ON } // Watchdog Interrupt Service / is executed when watchdog timed out ISR(WDT_vect) { // nothing here } </pre> 965cb77aba77ad09a9b0b7f09347cb81d2d53bfc 2017 VK Contest Dates 0 671 2682 2651 2017-02-02T00:23:00Z Admin 1 wikitext text/x-wiki 2017 VK Contest Dates (Phone) <pre> Date Name Start End (UTC) Bands ------------------------------------------------------------------------ 18-19 Mar John Moyle 0100 - 0059 (24hrs) All bands 6 May Harry Angel 1000 - 1146 (106mins) 80m 15 Jul VK Trans Tasman 0800 - 1400 (6hrs) 160m, 80m, 40m 12-13 Aug Remembrance Day 0300 - 0300 (24hrs) All bands 19-20 Aug Intl Lighthouse 0100 - 2359 (48hrs) All bands 7-8 Oct Oceania DX 0800 - 0800 (24hrs) 160/80/40/20/15/10m </pre> 1bc0c63c6872f489ff6b24b20376e8763fa01c82 File:5W-QRP-T-match-tuner.jpg 6 679 2686 2017-02-10T22:54:00Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:QRP 1-30MHz Manual Days Antenna Tuner Tune DIY.jpeg 6 680 2688 2017-02-10T22:57:59Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Qrp 0 605 2691 2683 2017-02-10T23:00:06Z Admin 1 wikitext text/x-wiki Some links to low power radios and related equipment ===Transceivers (CW)=== [[pixie2]] [[forty-9er]] ===Antenna Tuner=== [[5W T-match Antenna Tuner]] (aka the 'QRP 1-30MHz Manual Days Antenna Tuner' found on eBay) 318a245d0fdf65e4b71d6791310c7aa0af7c766f File:5W-QRP-T-match-tuner schematic.jpg 6 681 2692 2017-02-10T23:03:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:5W-QRP-T-match-tuner PCB bottom.jpg 6 683 2701 2017-02-11T00:01:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:5W-QRP-T-match-tuner PCB top.jpg 6 682 2705 2699 2017-02-11T00:45:11Z Admin 1 Admin uploaded a new version of &quot;[[File:5W-QRP-T-match-tuner PCB top.jpg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:5W-QRP-T-match-tuner inside.jpg 6 684 2723 2017-02-16T23:07:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Sacred-kingfisher.jpg 6 685 2730 2017-02-20T10:21:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Swamp-rat.jpg 6 686 2733 2017-02-20T10:25:56Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Nature in and around our house 0 327 2735 2734 2017-02-20T10:26:47Z Admin 1 wikitext text/x-wiki We don't live in a wildlife park by any stretch of the imagination but we do see a fair few animals around our house. Here is what we have seen so far: ==Mammals== [[File:Common brushtail possum.jpg|200px|thumb|none|Common Brushtail Possum]] [[File:Swamp-rat.jpg|200px|thumb|none|Swamp Rat]] ==Birds== [[File:Australian Magpie.jpg|200px|thumb|none|Australian Magpie]] [[File:Noisy Miner.jpg|200px|thumb|none|Noisy Miner]] [[File:Australian Pelican.jpg|200px|thumb|none|Australian Pelican]] [[File:Laughing Kookaburra.jpg|200px|thumb|none|Laughing Kookaburra]] [[File:Blackfacedcuckooshrike.jpg|200px|thumb|none|Black Faced Cuckoo Shrike]] [[File:Grey-Butcherbird.jpg|200px|thumb|none|Grey Butcherbird]] [[File:Rainbow lorrikeet.jpg|200px|thumb|none|Rainbow Lorrikeet]] [[File:Eastern Rosella.jpg|200px|thumb|none|Eastern Rosella]] [[File:Scaly Breasted Lorrikeet.jpg|200px|thumb|none|Scaly Breasted Lorrikeet]] [[File:Noisy friarbird.jpg|200px|thumb|none|Noisy Friarbird]] [[File:Crested pigeon.jpg|200px|thumb|none|Crested Pigeon]] [[File:Magpie lark.jpg|200px|thumb|none|Magpie Lark (Peewee)]] [[File:Silver-eye.jpg|200px|thumb|none|Silver Eye]] [[File:Asian koel.jpg|200px|thumb|none|Asian Koel]] [[File:Pied Currawong.jpg|200px|thumb|none|Pied Currawong]] [[File:Indian Myna.jpg|200px|thumb|none|Indian Myna]] [[File:Australian wood duck.jpg|200px|thumb|none|Australian Wood Duck]] [[File:Australian Raven.jpg|200px|thumb|none|Australian Raven]] [[File:Green figbird 03341.jpg|200px|thumb|none|Australasian Figbird]] [[File:Frogmouth.jpg|200px|thumb|none|Tawny Frogmouth]] [[File:Yellow-tailed black cockatoo.jpg|200px|thumb|none|Yellow-Tailed Black Cockatoo]] [[File:Scarlet-honeyeater.jpg|200px|thumb|none|Scarlet Honeyeater]] [[File:Blue-faced-honeyeater.jpg|200px|thumb|none|Blue Faced Honeyeater]] [[File:Willie-wagtail.jpg|200px|thumb|none|Willie Wagtail]] [[File:Sacred-kingfisher.jpg|200px|thumb|none|Sacred Kingfisher]] ==Reptiles== [[File:Blind snake.jpg|200px|thumb|none|Blind Snake]] [[File:White-grub.jpg|200px|thumb|none|Grub (Beatle Larva)]] [[File:Blue-tongue Lizard.jpg|200px|thumb|none|Blue Tongue Lizard]] [[File:Spotted Ctenotus Skink.jpg|200px|thumb|none|Spotted Ctenotus Skink]] ==Oligochaeta== [[File:Earthworm.jpg|200px|thumb|none|Earthworm]] ==Amphibia== [[File:Green tree frog.jpg|200px|thumb|none|Green Tree Frog]] ==Insects== [[File:St Andrews Cross Spider.jpg|200px|thumb|none|St Andrew's Cross Spider]] [[File:Redback spider.jpg|200px|thumb|none|Redback Spider]] [[File:Huntsman spider.jpg|200px|thumb|none|Huntsman Spider]] [[File:Mud Nest Wasp.jpg|200px|thumb|none|Mud Nest Wasp]] [[File:Blue Banded Bee.jpg|200px|thumb|none|Blue Banded Bee]] [[File:Common Crow Butterfly.jpg|200px|thumb|none|Common Crow Butterfly]] [[File:Monarch butterfly.jpg|200px|thumb|none|Monarch Butterfly]] [[File:Blue Triangle Butterfly.jpg|200px|thumb|none|Blue Triangle Butterfly]] [[File:Common blue butterfly.jpg|200px|thumb|none|Common Blue Butterfly]] [[File:Cabbage white butterfly.jpg|200px|thumb|none|Cabbage White Butterfly]] [[File:Imperial White Butterfly.jpg|200px|thumb|none|Imperial White (Jezebel) Butterfly]] [[File:Australian Cockroach.jpg|200px|thumb|none|Australian Cockroach]] Praying Mantis (no image yet) [[File:Giant Green Grasshopper.jpg|200px|thumb|none|Giant Green Grasshopper]] [[File:Christmas Beetle.jpg|200px|thumb|none|Christmas Beetle]] [[File:Redeye cicada.jpg|200px|thumb|none|Redeye Cycada]] [[File:Floury Baker cicada.jpg|200px|thumb|none|Floury Baker Cycada]] [[File:Ladybird-Harmonia conformis.jpg|200px|thumb|none|Harmonia Conformis (Ladybird)]] [[File:Ladybird-Coccinella transversalis.jpg|200px|thumb|none|Coccinella Transversalis (Ladybird)]] [[File:Australian sheep blowfly.jpg|200px|thumb|none|Australian Sheep Blowfly]] [[File:Hoverfly.jpg|200px|thumb|none|Hover Fly]] [[File:Fiddler-beetle.jpg|200px|thumb|none|Fiddler Beetle]] ==Trees== [[File:Tea Tree.jpg|200px|thumb|none|Tea Tree]] [[File:Callistemon.jpg|200px|thumb|none|Callistemon (Bottlebrush)]] [[File:Melaleuca.jpg|200px|thumb|none|Melaleuca (Paperbark)]] [[File:Lilly pilly.jpg|200px|thumb|none|Syzygium Smithii (Lilly Pilly)]] [[File:Nerium oleander.jpg|200px|thumb|none|Nerium Oleander]] ==Plants== (nothing here yet) ==Grasses== (nothing here yet) cc079eb60e4d8b914e868845b911fb1d0e3c35cb File:Atmel-logo1.png 6 687 2738 2017-03-07T22:04:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Icon-pdf.gif 6 688 2740 2017-03-07T22:06:37Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Atmel-logo2.png 6 689 2745 2017-03-07T22:12:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Microchip-logo1.png 6 690 2746 2017-03-07T22:12:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Silly-image-enhancement.jpg 6 691 2759 2017-05-23T12:04:10Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 5W T-match Antenna Tuner 0 678 2762 2761 2017-05-24T02:07:19Z Admin 1 wikitext text/x-wiki eBay lists this product as the "QRP 1-30MHz Manual Days Antenna Tuner" (手動天調套件). The 'Days' is probably due to an incorrect translation for DIY (do-it-yourself). In 2017 I purchased this kit off eBay for just under AU$16 and free delivery. Specifications: * Frequency range: 1 - 30MHz * Impedance matching range: 40 - 300 Ohms * Maximum RF Power: 5W * Network type: T-Network * Built-in SWR indicator LED (Dan Tayloe) * Insertion loss: ?? dB * Input impedance: 50 Ohms [[File:5W-QRP-T-match-tuner.jpg|300px]] [[File:5W-QRP-T-match-tuner inside.jpg|328px]] Completed kit build [[File:QRP 1-30MHz Manual Days Antenna Tuner Tune DIY.jpeg|400px]] All the parts inside the kit I got this kit with about 2.76m of enameled copper wire for the two toroids. For the bigger 12-tapped toroid windings I used 1.71m. Definitely more than enough was provided by the kit. Toroid type and dimensions: ===T106-2=== * outer diameter: 26.9mm * inner diameter: 14.5mm * thickness: 11.1mm * material: Carbonyl * colour: red with one side clear (grey) * characteristics: 250 KHz - 10 MHz ===FT37-43=== * outer diameter: 9.5mm * inner diameter: 4.75mm * thickness: 3.3mm * material: Type 43 * color: unpainted (grey) * characteristics: Wideband Transformers up to 50 MHz Schematic: [[File:5W-QRP-T-match-tuner schematic.jpg|450px]] The silkscreen for the small PCB has an error in the labels for T1. The schematic (which is correct) shows that the primary (IN) winding should have 2 turns and the secondary (OUT) winding should have 5 turns. The PCB however has been shipped with these labels swapped. For clarity I have added the correct labels for T1 on the picture below. [[File:5W-QRP-T-match-tuner PCB top.jpg|none|thumb|300px|PCB top view (updated T1 labels)]] [[File:5W-QRP-T-match-tuner PCB bottom.jpg|none|thumb|300px|PCB bottom view]] ===NOTES=== * There are several issues with this kit that may not be obvious at first glance. First of all, the kit does not come with a schematic. You'll either have to use the schematics on this page or find the appropriate schematic off Google elsewhere. * some have reported that the screws that come with the variable capacitors may be too long and can cut into the dielectric material inside the variable capacitor housing. * perhaps on earlier revisions the capacitor on the pcb was shown to be across the secondary winding, this is incorrect. My board had 'V2.0' printed on it and I could not see a fault in the tracks for the capacitor (check the schematic, it is correct and shows the capacitor going to ground after the diode). * The windings on the big toroid may be a squeeze-fit to go on the 12-position selector switch. Just make sure to keep a longer lead (about 10cm) on the 10-windings side to connect it to the variable capacitors. The 12 positions all connect to tapped wires (except the beginning-10-turn-lead and the centre pin on the rotary switch is connected with an insulated wire to ground. This wire can either go through the toroid or alongside the switch body. * when pressing the knob on the 12-position switch, also use a block or rod that provides pressure support from the back of the switch. When I had the rotary switch already mounted on the enclosure and attempted to push the knob on, the pressure was enough to undo all four clamps and separated the top and bottom half of the switch. Although not disastrous, I noticed that when I put the switch halves back together, the resistance to move from one position to the next was very low. * the self-adhesive stencils are not exactly in the middle. Especially the top one was off by several mm's so that when I wanted to fit one of the tuning capacitors I noticed that one of the internal screw posts was in the way. ===Tuning best practice=== There are usually an infinite number of combinations that allows a T-Network tuner to match impedances. However, there are some combinations of L and C that allow for better power transfer (and minimise losses) than others. Ideally we want to use the lowest amount of inductance required as the windings on the toroid are more lossy than the capacitors. Here is a recommended tuning best practice for a tapped-inductor T-network tuner: * Set the transmitter-side input Capacitor (Cin) and the antenna-side output Capacitor both to mid-scale. * Select an inductance switch position and rotate Cout to detect a slight SWR dip. * Set the inductance switch to another position if you didn't detect a dip. Only use Cout to check for a dip. * When you find a dip, adjust Cin for minimum SWR. * Move Cout slightly in one direction and use Cin to find minium SWR again. * If the SWR is lower than it was, continue to move Cout in the same direction until lowest SWR has been reached. * If the SWR is higher than it was, move Cout in the other direction and repeat above steps until lowest SWR has been reached. * If an SWR dip can be found on two inductance settings, choose the lower inductance to get the larger output capacitance. (From 'Getting the most out of your T-Network antenna tuner' by Andrew S. Griffith, W4ULD, QST Jan 1995) 8e0072525c9cadf88e9c9665c527123ee2281376 File:NOAA18 gqrx 20170607 stereo.jpg 6 692 2763 2017-06-07T23:03:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Sdr 0 379 2764 1561 2017-06-07T23:46:10Z Admin 1 wikitext text/x-wiki SDR (Software Defined Radio) on Raspberry Pi * [[rpi-websdr]] * [[rpi-rtl-sdr]] * [[rtl-sdr receive examples]] 8570bf1cee2087ffe17a11e9f9c493849cf6c0f4 File:Gqrx-noaa-18.jpg 6 694 2767 2017-06-08T00:36:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Rtl-sdr receive examples 0 693 2769 2768 2017-06-08T00:41:41Z Admin 1 wikitext text/x-wiki [[File:NOAA18 gqrx 20170607 stereo.jpg|thumb|none|350px|NOAA 18 image received with an RTL820 SDR receiver]] [[File:Gqrx-noaa-18.jpg|thumb|none|350px|NOAA 18 APT data as shown on GQRX]] Resources: * http://www.rtl-sdr.com/ RTL SDR (Software Defined Radios) * https://en.wikipedia.org/wiki/Automatic_picture_transmission APT (Automatic Picture Transfer) protocol * https://en.wikipedia.org/wiki/NOAA-18 Page dedicated to the NOAA 18 Satellite * http://www.wxtoimg.com/ Software to decode APT and WEFAX signals from weather satellites f53e4ace0be7ab116d03d462d0ec26a327bdf441 File:0126-iambic-keyer enclosure-back.jpg 6 695 2773 2017-06-10T00:01:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0126-iambic-keyer enclosure-front.jpg 6 696 2774 2017-06-10T00:02:42Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0126-iambic-keyer-inside-enclosure.jpg 6 697 2775 2017-06-10T00:03:57Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0126-iambic-keyer-pcb v0.2 bottom.jpg 6 698 2776 2017-06-10T00:04:27Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0126-iambic-keyer-pcb v0.2 bottom-with-tabs.jpg 6 699 2777 2017-06-10T00:05:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0126-iambic-keyer-pcb v0.2 top.jpg 6 700 2778 2017-06-10T00:06:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:ATmega328 datasheet complete.pdf 6 701 2788 2017-06-11T12:02:37Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:433-centre-loaded-quarter-wave-vertical.jpeg 6 703 2807 2017-07-03T10:45:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:433-j-pole-pcb.jpeg 6 704 2808 2017-07-03T10:45:42Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:433-short-helical.jpeg 6 705 2809 2017-07-03T10:46:04Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:433-sleeve-dipole.jpeg 6 706 2810 2017-07-03T10:46:28Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:433-captcha-dipole.jpg 6 707 2814 2017-07-03T10:59:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:433-moteino-monopole.jpg 6 708 2816 2017-07-03T11:05:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:433-PL259-short-helical.jpeg 6 709 2829 2818 2017-07-03T11:36:55Z Admin 1 Admin uploaded a new version of &quot;[[File:433-PL259-short-helical.jpeg]]&quot; wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0118-wireless-sensor-board 0 603 2842 2841 2017-07-13T21:59:06Z Admin 1 wikitext text/x-wiki This page will get more content over time but for now it just holds some points of interest and some instructions on how to bootstrap the board with an off-the-shelf microcontroller (fuses set for 1MHz, internal oscillator). The latest model of the 0118 wireless sensor board PCB has two connectors for programming the chip. The first is the 6-pin ICSP (In-Circuit Serial Programming) and the second is the FTDI-based programming connector. Before we can use Arduino to program the ATMega328p we have to upload a program called a bootloader. Once this in place we can use the FTDI programmer. So here we go: ==Functionality and Component Selection== Call it Design Specification, call it wish list.. This is what I want to use these devices for at some stage: Remote: * PIR sensor * Temperature sensor * Voltage Measurement * Easy interfacing with LCD * small * battery powered * option to attach solar panel for re-charging * range of at least 1km LOS The first design took care of many of these points and I settled on incorporating the following components on one PCB: * ATMega328P-AU * MCP1703 250mA 3.3V linear voltage regulator * MCP79410-I/SN Realtime Clock * MCP73831T-2ACI/OT LiPo Charge Controller * RFM12B 433MHz 1mW Transceiver Current BOM (PCB version 0.3): <pre> R1 33k (PV charge resistor, 47k is good too, just less current) R2 10k mcu RESET pullup R3,R4 4k7 (pullup resistors for I2C) R5 1k (LED series resistor) R6 10k (pullup for RTC interrupt R7,R13 10k (voltage divider for external voltage sampling) R9 10k (fet gate current limiting resistor for reverse-voltage protection) R10 4k7 (DS18B20 parasitic power resistor) R11,R12 10k (fet gate bleed-off resistors) R14 10k (radio_on fet gate resistor) C1,C11,C4 1uF C2 4.7uF C3,C5,C6,C9,C10 0.1uF C7,C8 7pF (10pF ok too, Crystal loading caps) XT1 32.769kHz (RTC Crystal) T1,T3,T6 NDS352AP Fet to control power to the radio module, battery reverse-polarity protection and ext voltage sampling circuit T5 BSS138 N-Ch FET to control external voltage sampling circuit D1 1N4001 DO-214AC diode to drop voltage to radio module D2 LED (on D9, not D13) U1 ATMega328P-AU (32-pin TQFP, preloaded with 'breadboard' bootloader) U2 MCP73831T Li-Po 4.2V charge controller SOT23-5 U3 DS18B20 OneWire temperature sensor (-125 to 125degC) U4 RFM12B (1mW), RFM69CW (17mW) or RFM69HCW (100mW) Hope RF transceiver module U5 SMA (edge pcb) connector [RS-Online 526-5785] U6 MCP79410 Realtime Clock SOIC </pre> With regards to the LiPo charge controller Status pin: [[tristatelogic-vs-opendrain]] ==Uploading the bootloader in a brand new ATMega238p chip== (pretty much following this: https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard ) ===Step 1: add wires to facilitate the Arduino to be an ISP programmer=== For the programming we will use an already functioning Arduino board as the programmer. Hook up power plus 4 programming wires (D10, D11, D12 and D13) to the new chip. NOTE: the RESET line is directly connected; no 100nF caps or 10k resistors anywhere. ===Step 2: set up the Arduino IDE and the Breadboard files=== We will use the Arduino IDE version 1.0.6 (the latest in the 1.0.x series) to do the programming. Download from here: https://www.arduino.cc/en/Main/OldSoftwareReleases#1.0.x While you're there, also grab the 'breadboard' files from here: https://www.arduino.cc/en/uploads/Tutorial/Breadboard1-0-x.zip or locally here: [[File:Breadboard1-0-x.zip]] (for 1.6.x version: download from here: https://www.arduino.cc/en/uploads/Tutorial/breadboard-1-6-x.zip or grab locally here: [[File:Breadboard-1-6-x.zip]] ) Set up Arduino by simply unzipping it in a directory. There you'll find the 'arduino' binary. Just run it and see if all looks good. From the menu go File - Preferences and note the path used for the 'sketchbook location' (e.g. /home/<user>/sketchbook). Close the Arduino IDE when done. Make sure there's a 'hardware' folder in the 'sketchbook' folder and unzip the Breadboard1-0.x.zip in there. Now start the Arduino IDE again. From the menu check 'Tools - Board' and in the list, probably at the bottom, you should have a board called 'ATMega328 on a breadboard (8 MHz internal clock)'. So far so good. ===Step 3: turn the working Arduino into a ICSP Programmer=== The Arduino IDE caters for this and has the sketch already available in the menu. Open the sketch at: 'File - Examples - ArduinoISP' Now program this sketch as you normally would (to the already working Arduino) (I assume you have already set the correct serial port) ===Step 4: change the programming method=== Now that the Arduino is ready to program a new chip we need to make a change in the IDE that we're not using the USB cable to program the already working Arduino (otherwise we'll be overwriting the ArduinoISP programming sketch), but instead use the Arduino as a programmer to program something else. The Arduino sketch will effectively act as a tunnel and forward the code over the 4 programming wires and load up the new chip. From the menu, select: 'Tools - Programmer - Arduino as ISP' Whatever we program now will be coming out over the 4 programming wires. ===Step 5: select the target board we wish to program=== We're almost ready to program, but before we do we must tell the IDE what type of chip is connected to the 4 programming wires. This information is stored in a 'boards' file. When we unzipped the 'Breadboard1-0.x.zip' file in the 'hardware' directory we presented the Arduino IDE with a new board configuration specifically for this purpose. The boards file we unzipped is only to be used for ATMega328 chips and it will use fuse settings that will make it use the internal oscillator and run at 8 MHz. From the menu, select: 'Tools - Board - ATMega328 on a breadboard (8 MHz internal clock)' ===Step 6: upload the bootloader=== Everything is now in place to attempt the uploading of the bootloader code into the new chip using an existing, working Arduino, as the ISP Programmer. Confirm that on the status bar the Arduino IDE shows the Breadboard name and the port we'll use. All good? Let's go.. From the menu, select: 'Tools - Burn Bootloader' The lights on the working Arduino board will flash for about 30 seconds and then the IDE should show the message 'Done burning bootloader'. Congratulations! You may now move the newly programmed ATMega328 into your own project and use the FTDI method of programming it. The RESET line is one item I would like to address: When you have uploaded the bootloader into the new chip and wish to program it using the FTDI method, you should add the following circuitry to the chip's RESET line in order to guarantee successful programming every time you use the Arduino IDE and the FTDI method. <pre> 100nF FTDI Vcc --+-----||-----+---- RESET | | +----/\/\/---+ 10k </pre> NOTES: * to program a new bootloader into an ATMega328 using another Arduino with the ArduinoISP sketch it is important that the RESET line is directly connected. Once the bootloader has been loaded into the new micro and the FTDI programming method is used (no longer connected with the original Arduino board) then a 100nF capacitor is required. Without this capacitor the FTDI programming fails. ==PCB versions== [[File:0118-PCB Versions 0.1 and 0.2.jpg|none|thumb|250px|PCB versions 0.1 and 0.2 side by side]] ===Version 0.1, initial board (June 2016)=== In this version: * Apart from bugs below, most things work Bugs: * GND trace missing from PV to three header pins * T1 (RADIO_ON FET) swapped Drain and Source * A2 and A3 swapped (Silkscreen A2 = real A3, Silkscreen A3 = real A2) Suggested improvements: * move top silkscreen text further away around the 3-pin connector (under I2C connector) and around the 6-pin (with A6 and A7 pins) connector. * bigger fonts underneath power connectors (PV, LiPo) * move SMA connector slightly inwards into pcb? * re-use pin D9 to use it as an extra IO pin * move things around to better fit an external connector (DB9/DB15?) * bypass track pads for RESET capacitor for initial ISP programming * add white area to write version numbers * shorten RTC pads * bigger SOT-23 pads? * check signal trace from RFM to SMA for 50R impedance * add a pushbutton? * reposition holes slightly for better fit in enclosure ===Version 0.2 (Oct 2016)=== In this version: * increased ground plane under radio module * 50R impedance signal tracks for antenna * shortened board a little for better fit with SMA connector * repositioned holes for better fit in enclosure * moved pin label silkscreens a bit further so they can be read better * shortened pads for RTC module * removed ICSP header * added pushbutton * added pin D9 through-hole * added white area next to SMA connector to write version numbers * added solder-jumper-pad for measuring power after MCP1703 * added GND track from PV to 3 header pins Bugs: * A2/A3 still persists? * T1 (RADIO_ON FET) swapped Drain and Source ===Version 0.3 (June 2017)=== In this version: * added extra white silkscreen pad for notes * fixed controlling switched power to the radio * disconnected Aref to Vcc so we can use the internal 1.1V voltage regulator * swapped pinout for A2 and A3 (now correct: A1, A2, A3) * ran some low-power code and was able to get the consumption from a 4.1V 100mAh LiPo down to around 3uA. This is with the MCP79410 Realtime Clock, I2C 10k pullup resistors + MCP73831T LiPo charge controller. As it turns out, the MCP1703 LDO linear voltage regulator has some issues. Google transient response and PSRR for details, but what it basically comes down to is that when the 1703 needs to suddenly cater for a bigger current draw, it drops the voltage for a few us before it can recover from the sudden change. On the scope I saw that when I turned on the radio (drawing about 20mA) the voltage dipped from 3.3V to about 2.4V for about 8us. There may be other things happening as well, but the result was that the atmega328 went into reset every time the radio was switched on. Because I am aiming for low power consumption and want to switch of the radio when the mcu is in sleep mode, this issue needs to be rectified. For a while I started looking at LDOs that have a better transient response, but I found I was getting into more expensive parts and perhaps harder to get as well. Don't get me wrong, the 1703 is a great low-power device when the transient response is not an issue, but for me it was just not the right choice. I then started looking at the possibility of removing the LDO altogether. I ran some checks and it turned out that the RTC, DS18B20 and the ATmega328 were more than capable of running off 4.2V (maximum voltage when a 1S LiPo is charged). The only part that could handle only up to 3.6V was the RFM radio module. After doing some tests I experimented with just putting in a single 1N4001 diode to drop the power by 0.7V. This is now my current solution to the problem. I checked whether I needed one or two diodes in series and came up with the following chart: {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>LiPo Voltage</b> |style="background-color:#f2f2f2;"|<b>Current draw</b> |style="background-color:#f2f2f2;"|<b>Diodes</b> |style="background-color:#f2f2f2;"|<b>Radio Voltage</b> |style="background-color:#f2f2f2;"|<b>Voltage drop</b> |- |4.2 |2mA |1x |3.58 |0.62 |- |4.2 |2mA |2x |2.96 |0.62 |- |4.2 |100mA |1x |3.49 |0.71 |- |4.2 |100mA |2x |2.78 |0.71 |- |4.2 |200mA |1x |3.42 |0.78 |- |4.2 |200mA |2x |2.64 |0.78 |- |3.6 |2mA |1x |2.98 |0.62 |- |3.6 |2mA |2x |2.36 |0.62 |- |3.6 |100mA |1x |2.89 |0.71 |- |3.6 |100mA |2x |2.18 |0.71 |- |3.6 |200mA |1x |2.82 |0.78 |- |3.6 |200mA |2x |2.04 |0.78 |- |3.5 |2mA |1x |2.88 |0.62 |- |3.5 |2mA |2x |2.26 |0.62 |- |3.5 |100mA |1x |2.79 |0.71 |- |3.5 |100mA |2x |2.08 |0.71 |- |3.5 |200mA |1x |2.72 |0.78 |- |3.5 |200mA |2x |1.94 |0.78 |} This shows that with 1 series diode the voltage is lowered enough to safely power the radio module even when the battery is fully charged. I did further tests by lowering the input voltage even further and I could theoretically have the battery voltage drop to 3.3V and the radio would still be able to function properly. Of course, you would not want to run a LiPo battery that low, but it's nice to know where the edge of operation conditions are. Losing the LDO made several improvements for this project: * less current drain on the battery as the LDO is not taking up any power anymore * more space on the circuit board as the LDO and its surrounding caps are gone (although I do now have to add the diode, DO-214 footprint) * made the design somewhat simpler and cheaper * improves power stability as the LDO no longer causes a dip whenever a big(ish) load is connected * longer battery life as the LDO needs to overcome the dropout voltage (according to the datasheet a 3.3V 1703 is out of spec when fed with less than 4V on the input and supplying the maximum 250mA output). Not that I want to, but I can run my LiPo now down to 3.3V and still get the radio to work. * no longer a restriction of 250mA current draw External connector pinout Using a DSUB9 connector: <pre> GPS 1W ExtV BZ free | | | | | | | | | | 1 o o o o o 5 6 o o o o 9 | | | | GND PV |---| | | Batt | pcb </pre> MCP7383 LiPo Charge Controller - charge current and Rprog resistor values <pre> 500.0 mA 2 k 454.5 mA 2.2 k 416.7 mA 2.4 k 370.4 mA 2.7 k 333.3 mA 3 k 303.0 mA 3.3 k 277.8 mA 3.6 k 256.4 mA 3.9 k 232.6 mA 4.3 k 212.8 mA 4.7 k 196.1 mA 5.1 k 178.6 mA 5.6 k 161.3 mA 6.2 k 147.1 mA 6.8 k 133.3 mA 7.5 k 122.0 mA 8.2 k 109.9 mA 9.1 k 100.0 mA 10 k 90.9 mA 11 k 83.3 mA 12 k 76.9 mA 13 k 66.7 mA 15 k 62.5 mA 16 k 55.6 mA 18 k 50.0 mA 20 k 45.5 mA 22 k 41.7 mA 24 k 37.0 mA 27 k 33.3 mA 30 k 30.3 mA 33 k 27.8 mA 36 k 25.6 mA 39 k 23.3 mA 43 k 21.3 mA 47 k 19.6 mA 51 k 17.9 mA 56 k 16.1 mA 62 k 14.7 mA 68 k </pre> ===Version 0.4 (July 2017)=== In this version: * removed the MCP1703 LDO linear voltage regulator. Everything is now powered straight off the battery * 50 Ohm Z for antenna stripline and connector * on-board P+N-Fet controlled voltage divider for external Voltage measurements + added an extra pad to conveniently connect an external voltage source for measuring. * disconnected Vref from Vcc so that we can use the internal 1.1V reference for measuring battery voltage * Added pads for an on-board Dallas DS18B20 'OneWire' temperature sensor * Added an inline 1N4001 diode to the power tail to the radio module. This drops down the voltage enough to operate the module within specs. * added a reverse-polarity protection P-Fet across the battery terminals * moved the Crystal loading caps a bit further so that soldering doesn't overflow in the Crystal pads Bugs: * in V0.3 the Vcc line from the FTDI connector to the nearby Vcc track got deleted. It's now back again. 2332528979bcb42b9b1a3a83240960e6876ef26a File:Turnigy evolution.jpg 6 711 2846 2017-08-12T05:27:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:DJI-Phantom quad.png 6 712 2849 2017-08-12T05:43:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Turnigy-evolution-settings-for-heli x v6.1.jpg 6 713 2851 2017-08-13T11:16:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Heli-x 3D-airport.jpg 6 714 2852 2017-08-13T11:17:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Rc-controller 0 710 2854 2853 2017-08-13T11:18:50Z Admin 1 wikitext text/x-wiki In 2017 I decided to get familiar with Quadcopters, aka 'quads', aka 'Drones'. the transmitter I bought was a 'model 2' (throttle on the left) 2.4GHz Turnigy Evolution. [[File:Turnigy evolution.jpg]] It has a micro-USB port and can be used as a 'game controller' in FPV Quad Simulation software. At this time of writing there are several free options for FPV Simulation/Training: * DRL (Windows only) * Heli-X (Windows and Linux) After downloading Heli-X version 6.1, I unzipped it and ran the software in KDE 5 under Debian Stretch (v9). It seemed to start up properly but it didn't recognise the transmitter. It turned out I had to load the following packages to add joystick support to my system: <code> apt-get install joystick jstest-gtk </code> After that it saw the controller and I could use the Heli-X software on Linux. In the Heli-X software, there are varous models available. Mostly helicopters, but there is one quad: DJI Phantom [[File:DJI-Phantom quad.png]] Update the stick settings: [[File:Turnigy-evolution-settings-for-heli x v6.1.jpg]] Select a 3D airport, set camera to FPV mode and enjoy: [[File:Heli-x 3D-airport.jpg]] dce5af61a841263f8a77dfcd3f7bcae933dc447d File:Range-test-antennas 2017.jpg 6 715 2865 2017-08-14T22:30:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Range-test-base-station 2017.jpg 6 716 2866 2017-08-14T22:31:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Range-test-mobile-unit 2017.jpg 6 717 2867 2017-08-14T22:32:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Low-cost antenna shootout 70cm 0 702 2869 2868 2017-08-14T22:34:15Z Admin 1 wikitext text/x-wiki These days, many low-cost antennas for the 70cm ISM band can be obtained from online sellers though eBay and Amazon. I was curious to see how well they performed in a variety of environments. I was also interested to see how well my own design, the 'Captcha' PCB dipole, would stack up against these commercially available antennas. Here, we put several models to the test. The contestants are: {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Radiation Pattern</b> |style="background-color:#f2f2f2;"|<b>Gain (specified)</b> |style="background-color:#f2f2f2;"|<b>Price</b> |- |[[File:433-centre-loaded-quarter-wave-vertical.jpeg|none|thumb|250px|centre-loaded quarter wave vertical]] |Omnidirectional |3dBi |AU$7.67 |- |[[File:433-j-pole-pcb.jpeg|none|thumb|250px|J-Pole on a PCB]] |Omnidirectional |? |AU$1.52 |- |[[File:433-short-helical.jpeg|none|thumb|250px|short helical quarter wave]] |Omnidirectional |2-3dBi |AU$1.20 |- |[[File:433-sleeve-dipole.jpeg|none|thumb|250px|sleeve dipole]] |Omnidirectional |6dBi |AU$3.59 |- |[[File:433-captcha-dipole.jpg|none|thumb|250px|captcha pcb dipole]] |Omnidirectional |? |US$9.01 |- |[[File:433-moteino-monopole.jpg|none|thumb|250px|quarter wave vertical 'monopole' 150mm wire antenna]] |Omnidirectional |?dBi |(free) |- |[[File:433-PL259-short-helical.jpeg|none|thumb|250px|short helical with PL259 connector]] |Omnidirectional |2.5dBi |AU$14.09 |} How the range was determined I tested these antennas on low power at 2.5uW (-26dBm). For range testing I wrote two sketches; one for a stationary 'base' unit, and one for the mobile unit that I took with me whilst walking away. The mobile unit is equipped with a LED and a piezo buzzer and sends out a packet every 2 seconds. When the base unit receives a packet, it re-sends it at full power (100mW, 20dBm) back to the mobile unit. When the mobile unit receives the re-sent ack packet a short beep is sent to a piezo transducer. That tells me that the base station can still receive the packets. I know that I've reached the range limit when I stop hearing confirmation beeps. For this test I did not rely on GPS as the distances are relatively short and GPS would probably introduce a significant measurement error of several metres. Instead, I just walked it out and counted my steps. This test is all about the relative range between the various antennas, NOT the real range when using radios at maximum power. [[File:Range-test-antennas 2017.jpg|none|thumb|250px|The Candidates]] Terrain [[File:Range-test-base-station 2017.jpg|none|thumb|250px|The Base Station and terrain]] I tested in a small park surrounded by trees and residential buildings, a level field, no immediate buildings nearby, dry soil ground. The distances shown below were obtained by attenuating the signal down to -26dBm using a 30dB SMA attenuator. This was done purely to limit the range to well within the size of a small park where I did the testing. [[File:Range-test-mobile-unit 2017.jpg|none|thumb|250px|The Mobile Unit with a 30dB attenuator]] The results: {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Distance</b> |style="background-color:#f2f2f2;"|<b>Rank</b> |- |centre-loaded quarter wave vertical |50m |4 |- |J-Pole on a PCB |21m |6 |- |short helical quarter wave |58m |2 |- |sleeve dipole |55m |3 |- |captcha pcb dipole |75m |1 |- |quarter wave vertical 16cm wire antenna |31m |5 |- |short helical with PL259 connector |N/A |N/A |} 59aa4ae4c8093a9114c43cfbf29995057188bd80 File:Mw-images.png 6 718 2871 2017-10-02T22:42:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Data-blur.jpg 6 720 2882 2017-10-19T21:31:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Demo-map-image-gnuplot.jpg 6 721 2885 2017-10-19T21:35:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Demo-gnuplot-gps-map.jpg 6 722 2888 2017-10-19T21:39:28Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Gnuplot 0 719 2890 2889 2017-10-19T21:59:28Z Admin 1 wikitext text/x-wiki Gnuplot is a portable command-line driven graphing utility for Linux, OS/2, MS Windows, OSX, VMS, and many other platforms. I have been using Gnuplot for some of my antenna-range measurements using a GPS module and a microcontroller. The way I use it on Linux, there are four files required to create a new plot: * data file [[File:Data-blur.jpg]] This is data in CSV (comma separated values) and the column numbers need to match what the Gnuplot script expects. A common format would be to have whatever you're measuring (e.g. signal strength, or voltage) in the first column, gps latitude and longitude in the second and third columns, maybe elevation in the fourth column, and gps timestamps (usually in UTC format) in the fifth column. But once you have closer look in the gps.gnuplot.txt script file you should be able to change this around. The columns in the script file are referred to as $1, $2, $3, etc.. * map image [[File:Demo-map-image-gnuplot.jpg]] A map in .png format of the area that covers the range where GPS measurements were made. Although not strictly required for generic Gnuplot use, I used a bash script as a pre-processor to feed the coordinates as read from the map image's filename. This way no script files need to be edited, only the map image filename. The filename needs to contain the top-left and bottom-right coordinates in a specific order. * plot-coverage-map.sh This is a Linux bash shell script that will run some checks to make sure that the input files exist and that the coordinates are found in the filename. It also allows for adjusting the position of the data on the map if the coordinates don't exactly align. The script will scan the map image to get the dimensions and pass it on to gnuplot. The code for this file is shown below. * gps.gnuplot.txt The script that contains all the functions to combine the data and the map and produce the resulting plot image. It uses various variables that are fed from the bash script so that this file needs very little editing to make plots for different input files. The code for this file is shown below. NOTE: you may need to swap the latmin/latmax or lonmin/lonmax values if you're in the northern hemisphere or west of Greenwich. Example final image with the data plotted, legend, title and axis labels. [[File:Demo-gnuplot-gps-map.jpg]] Since the data file and the map image are dependent on your preferences, I have only listed here the contents of the bash script and the gnuplot script. ===plot-coverage-map.sh=== <pre> #!/bin/sh GNUPLOT=/usr/bin/gnuplot PLOTFILE=gps.gnuplot.txt # update these if the map coordinates don't exactly match the data. # values are in 100,000th arc decimals and can go negative ADJUST_LAT=0 ADJUST_LON=0 # range of data values. VALUES_MIN=10 VALUES_MAX=1024 OUTFILE="measurements-plotted.png" # -- shouldn't have to edit anything else below in this script -- if test $# -lt 2 then echo "Syntax: $0 <mapfile_latmax,lonmax_latmin,lonmin.png> <datafile>" echo exit 1 fi if ! test -f $1 then echo "File not found: $1" exit 1 fi if ! test -f $2 then echo "File not found: $2" exit 1 fi # echo fetch coordinates from map file LATMAX=`echo "$1" | awk -F _ '{print $2}' | awk -F , '{print $1}'` if test -z $LATMAX then echo "unable to get map Max Latitude, please check filename format" exit 1 fi LONMAX=`echo "$1" | awk -F _ '{print $2}' | awk -F , '{print $2}'` if test -z $LONMAX then echo "unable to get map Max Longitude, please check filename format" exit 1 fi LATMIN=`echo "$1" | awk -F _ '{print $3}' | awk -F , '{print $1}'` if test -z $LATMIN then echo "unable to get map Min Latitude, please check filename format" exit 1 fi LONMIN=`echo "$1" | awk -F _ '{print $3}' | awk -F , '{print $2}' | awk -F . '{print $1"."$2}'` if test -z $LONMIN then echo "unable to get map Min Longitude, please check filename format" exit 1 fi echo "Latmax: $LATMAX Lonmax: $LONMAX" echo "Latmin: $LATMIN Lonmin: $LONMIN" if test $ADJUST_LAT -ne 0 then echo "Adjusting Latitude by $ADJUST_LAT" LATMAX=`echo "scale=6;$LATMAX + ($ADJUST_LAT/1000000)" | bc` LATMIN=`echo "scale=6;$LATMIN + ($ADJUST_LAT/1000000)" | bc` fi if test $ADJUST_LON -ne 0 then echo "Adjusting Longitude by $ADJUST_LON" LONMAX=`echo "scale=6;$LONMAX + ($ADJUST_LON/1000000)" | bc` LONMIN=`echo "scale=6;$LONMIN + ($ADJUST_LON/1000000)" | bc` fi # get map file dimensions IMG_WIDTH=`file "$1" | awk -F "PNG image data, " '{print $2}' | awk '{print $1}'` if test -z $IMG_WIDTH then echo "unable to get image width, please check output from 'file' command" exit 1 fi IMG_HEIGHT=`file "$1" | awk -F "PNG image data, " '{print $2}' | awk '{print $3}' | awk -F , '{print $1}'` if test -z $IMG_HEIGHT then echo "unable to get image height, please check output from 'file' command" exit 1 fi echo "dimensions: $IMG_WIDTH x $IMG_HEIGHT" echo "create graph.." if $GNUPLOT -e "width=$IMG_WIDTH" \ -e "height=$IMG_HEIGHT" \ -e "latmax=$LATMAX" \ -e "lonmax=$LONMAX" \ -e "latmin=$LATMIN" \ -e "lonmin=$LONMIN" \ -e "values_min=$VALUES_MIN" \ -e "values_max=$VALUES_MAX" \ -e "MAP_FILE='$1'" \ -e "DATA_FILE='$2'" \ -e "OUT_FILE='$OUTFILE'" \ $PLOTFILE then OK=1 else # some error occurred, keep the screen paused for a while longer sleep 2 fi echo "Done" </pre> The second file is the gnuplot script file that does the actual plotting of the data on the background image: ===gps.gnuplot.txt=== <pre> #!/usr/bin/gnuplot reset set key off set term png size width,height # Data is comma delimited set datafile separator "," set output OUT_FILE set pm3d; set pm3d map # initially, disable the colorbox so it isn't generated with images and data plots unset colorbox # vertical ticks on the colorbox set cbtics set multiplot set lmargin at screen 0.1 set rmargin at screen 0.85 set bmargin at screen 0.1 set tmargin at screen 0.9 set title "Enter a useful title here " # -- define the data point colors on the map -- # option #1 - hand-pick two Hue values and let gnplot map the values to it #h1 = 20/360.0 #h2 = 250/360.0 #set palette model HSV functions (1-gray)*(h2-h1)+h1,1,0.98 # option #2 - simple two-color linear gradient #set palette model RGB defined ( 0 'red', 1 'blue' ) # option #3 - skewed towards higher values set palette model RGB defined ( 0 'yellow', 600 'blue', 800 'green', 1024 'red' ) # -- plot the background map -- unset xtics unset ytics plot MAP_FILE binary filetype=png with rgbimage notitle # -- plot the data on the map -- # west east set xrange [lonmax:lonmin] # south north set yrange [latmin:latmax] set xtics .01 set ytics .01 set xlabel "Longitude" set ylabel "Latitude" plot DATA_FILE using 3:2:1 notitle with points lc palette # -- plot the color box -- set cbrange [values_min:values_max] set cblabel "Signal Strength (0-1024)" offset 0.0,0.0 set zrange [0:1] unset xlabel unset ylabel unset title unset xtics unset ytics set colorbox vertical user origin 0.87,0.1 size 0.02,0.5 splot '++' u ($2):($3):(cos($2*$3)):($1) with pm3d unset multiplot </pre> For the background map I just use google maps and do a print-screen of an area. I then right-click on the map to get the coordinates and put those for the top-left and bottom-right corners of the image into the filename. 0f669453d0eb0c14bf3ffb0150d591aeae4e3646 File:TE menu 01.jpg 6 724 2903 2017-10-22T06:21:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TE menu 02.jpg 6 725 2904 2017-10-22T06:22:53Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TE menu 03.jpg 6 726 2906 2017-10-22T06:25:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TE menu 04.jpg 6 727 2907 2017-10-22T06:26:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TE menu 05.jpg 6 728 2911 2017-10-22T06:31:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:TE menu 06.jpg 6 729 2912 2017-10-22T06:34:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Bf 01-esc.png 6 730 2916 2017-10-22T07:17:23Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Bf 02-failsafe.png 6 731 2917 2017-10-22T07:18:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Bf 03-throttle1000.png 6 732 2918 2017-10-22T07:19:08Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Bf 04-throttle900.png 6 733 2920 2017-10-22T07:20:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Failsafe on turnigy evolution 0 723 2921 2919 2017-10-22T07:23:39Z Admin 1 wikitext text/x-wiki I wrote this page to properly get RC Receiver Failsafe working on my quadcopter. ===What is Failsafe?=== Failsafe (in the world of Remote Controlled Planes and Quadopters) is the term used to describe techniques to prevent a device (e.g. the plane/copter or the transmitter) from damaging itself or its environment. Two common failsafe implementations are: * Receiver Failsafe To prevent a plane from flying away when the RC transmitter signal is lost (e.g. when it goes out of range or when the transmitter batteries have depleted). There is also the possibility that the RC receiver (on the quadcopter) has somehow lost the communications link between it and the flight controller. This could be due to a broken cable, a connector that slowly vibrated out of its socket, or maybe the receiver is stuck in a code loop. Even when the transmitter is still talking to the receiver, the received signals are not being sent to the flight controller anymore. In both these scenarios (transmitter fail or comms between FC and radio are not working) we can instruct the flight controller to take action. In most cases we want actions to minimise any potential damage to the quad or its environment. The flightcontroller can do fancy things such as; - wait with taking action for short time to make sure the lost comms wasn't a brief glitch - set the flight mode into Angle or Horizon mode to level the quad - gradually take the throttle down - turn the motors off completely after 5 seconds - turn on a beeper and/or LEDs so the quad can be easily located * Transmitter Failsafe To prevent the situation where the transmitter doesn't have enough battery power to safely bring back or land a plane. Modern RC Receiver modules are also sending back telemetry to the Transmitter. Usually this is RSSI (received signal strength indicator) and Vbatt (the voltage of the plane's battery). In the latter case it is possible to set up a failsafe for the plane's battery and when triggered, will sound an audible alarm on the transmitter whenever the plane's battery has reached a certain minimum voltage. On this page I mainly focus on Receiver failsafe when the link with the Transmitter is lost. Modern RC receivers often have failsafe features built in. This will allow certain values to be communicated to the flight controller whenever the link with the transmitter has been lost. With my Turnigy Evolution I configure these failsafe settings in radio's menu system and then store them into the receiver module when I bind with it. Binding usually only needs to be done once; both the radio and the receiver will remember their settings when powered off. Below, we demonstrate the default behaviour when no failsafes are set, why just setting failsafe isn't enough, and lastly, the correct way to get the flight controller to detect Receiver Failsafe from a lost transmitter signal. Transmitter: Turnigy Evolution Receiver: Turnigy iA6C Flight controller: Seriously Pro F3 Step 1 - Reset Endpoints and Failsafes and demonstrate the problem. In the transmitter settings, set: * all endpoints to 100% (low) and 100% (high) * Subtrim all to 0% * Failsafe for all channels to OFF Then do an RX-bind to set these values in the receiver In Betaflight: * Configuration: ESC Motor features: set Minimum Throttle to 1035 and Maximum Throttle to 2000 [[File:Bf 01-esc.png]] * Failsafe: Valid pulse range settings: minimum length: 885, maximum length:2115 [[File:Bf 02-failsafe.png]] * safe and reboot fc in betaflight First test: - with the throttle at the minimum position, betaflight will read 1000 - turn off the transmitter - betaflight will STILL show throttle at 1000. [[File:Bf 03-throttle1000.png]] Second test: - turn the transmitter back on - arm the quad (remember, no props!) - raise the throttle lightly (you may need to hold the quad in your hand as otherwise the motors can spin out of control) - turn off the transmitter - the motors will continue to run, failsafe does not kick in. Although this is default behaviour, it will not allow detection of a lost transmitter signal to the flight controller and could potentially mean your quad will fly out of control if the signal is lost. Step 2 - Set up failsafe on the transmitter and bind the receiver In the failsafe menu, set the value for channel 3 to -100%. Notice how you cannot get the indicator bar any lower and into the left pocket. picture of setting failsafe to channel 3 (throttle) at -100% [[File:TE menu 01.jpg]] picture of failsafe channel settings list [[File:TE menu 02.jpg]] Bind with receiver betaflight will show only 1000 as the minimum, still not good. [[File:Bf 03-throttle1000.png]] Don't worry if you are no longer able to arm the quad, we'll get to this at the end. Step 3 - set endpoints set Channel three minimum value endpoint to (minus) 120% (the maximum value I could set) picture of setting ch3 minimum endpoint to -120% [[File:TE menu 03.jpg]] picture of endpoints channel settings list [[File:TE menu 04.jpg]] picture of betaflight now showing 900 [[File:Bf 04-throttle900.png]] re-bind with receiver test 1 - turn transmitter off - betaflight throttle jumps up from 900 to 1000 (still not good) [[File:Bf 03-throttle1000.png]] Don't worry if you are no longer able to arm the quad, we'll get to this at the end. step 4 - re-set endpoints Enter '''failsafe''' menu for ch3. Notice how the indicator bar has now moved into the left-most pocket. Initially it will show -100%, but when you move the stick, it will go further down to -120%. picture of the endpoint showing the original -100% [[File:TE menu 05.jpg]] picture of the endpoint showing the new -120% value after briefly moving the throttle stick up and back down again. [[File:TE menu 06.jpg]] Press 'setup' to set the new value. Betaflight shows 900 with transmitter on [[File:Bf 04-throttle900.png]] turning transmitter off, leaves value at 900 (almost there) - now enter '''endpoints''' menu and set back to 100% xxxxxx picture missing - betaflight will show minimum value with transmitter on at 1000 [[File:Bf 03-throttle1000.png]] test - raise the throttle somewhere just above 1000 xxxxxx picture missing - turning transmitter off - betaflight will now show 900 (that's it!) [[File:Bf 04-throttle900.png]] step 5 - update valid ranges - failsafe settings: set minimum length above the 900 (or whatever minimum value you had) but below 1000. xxxxxx picture missing - usually somewhere around 980 is fine. - save in betaflight and reboot flightcontroller test - arm quad (should work now) - receiver page in betaflight should show 1000 for throttle when at minimum [[File:Bf 03-throttle1000.png]] - raise throttle lightly (no props!! hold quad) - turn off transmitter - failsafe kicks in, cuts motors and does whatever is configured as failsafe actions - betaflight should show throttle at the setting we set in step 5 xxxxxx picture missing Do not bind the receiver again, as this will reset the endpoints!!! ed7abfb0db220e3f3719c9663df4786b72ab7c51 File:Micro-minimosd.jpeg 6 735 2925 2017-12-21T03:54:17Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 OSD 0 736 2927 2926 2017-12-21T03:56:01Z Admin 1 wikitext text/x-wiki ===Micro MinimOSD=== [[File:Micro-minimosd.jpeg]] * working voltage: 2S - 4S 2fa7cb6648441c79454c789274352ff4cb1502f3 File:Boscam-RC832.png 6 737 2928 2017-12-21T03:58:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Boscam-RC832-cable-pinout.png 6 739 2932 2017-12-21T04:09:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Boscam--RC832 pcb-top.jpg 6 740 2934 2017-12-21T04:12:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Eachine-EV100-DVR.jpg 6 741 2936 2017-12-21T04:16:32Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Eachine-EV100-DVR-pinout.jpg 6 743 2938 2017-12-21T04:27:28Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 DVR 0 742 2939 2937 2017-12-21T04:27:58Z Admin 1 wikitext text/x-wiki Eachine EV100 DVR [[File:Eachine-EV100-DVR.jpg]] [[File:Eachine-EV100-DVR-pinout.jpg]] ce470325ae6112f2b6357ae6d7f316f58caf15a1 File:Boscam-RC832-AV-pinout.jpg 6 744 2940 2017-12-21T04:31:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Video receivers 0 738 2941 2935 2017-12-21T04:32:18Z Admin 1 wikitext text/x-wiki Boscam RC832 [[File:Boscam-RC832.png]] [[File:Boscam--RC832 pcb-top.jpg]] Description: * Brand Name: Eachine * Item Name: RC832 receiver * Antenna Gain: 2db * Antenna Impedance: 50Ω * Video Impedance: 75Ω * Video Format: NTSC/PAL auto * Power Input: 12V * Working Current: 200mA max * Dimension: 80x 65 x15mm * Weight: about 85g * Connector: receiver module side RP-SMA jack, antenna RP-SMA plug Features: * 48 channels choice to get the best transmitting quality * Compatible with A,B,E and F frequency bands * Smaller size with lighter weight * 48 CH compatible to all FPV 5.8g transmitter. * Super small 200mA current for 600mW wireless transmitter power. * 600mW transmitter power assure 5KM distance in open area, 5-8 KM is available if work with the bigger gain antenna. [[File:Boscam-RC832-cable-pinout.png]] [[File:Boscam-RC832-AV-pinout.jpg]] 3018625db4c83c7d6eb096e5c22fab04959fdfcc File:Beerotor-BVone-AV-pinout.jpg 6 745 2942 2017-12-21T04:36:07Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Beerotor-BVone-goggles.jpg 6 746 2943 2017-12-21T04:38:57Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Beerotor-BVone BR05V01 pcb-top.jpg 6 748 2945 2017-12-21T04:43:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Beerotor-BVone BR05V01 pcb-bottom.jpg 6 749 2946 2017-12-21T04:44:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Beerotor-BVone BR05V01 top components.jpg 6 750 2949 2017-12-21T04:50:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Beerotor-BVone BR05V01 bottom components.jpg 6 751 2950 2017-12-21T04:51:56Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Goggles 0 747 2952 2951 2017-12-21T04:58:28Z Admin 1 wikitext text/x-wiki Beerotor BVone [[File:Beerotor-BVone-goggles.jpg]] [[File:Beerotor-BVone-AV-pinout.jpg]] Top view: [[File:Beerotor-BVone BR05V01 pcb-top.jpg|300px|thumb|none|PCB top view]] [[File:Beerotor-BVone BR05V01 top components.jpg|300px|thumb|none|PCB top components]] Bottom view: [[File:Beerotor-BVone BR05V01 pcb-bottom.jpg|300px|thumb|none|PCB bottom view]] [[File:Beerotor-BVone BR05V01 bottom components.jpg|300px|thumb|none|PCB bottom components]] * AV receiver modules are probably the RX5808 * APA2068 is a 2.6 Watt DC volume control and stereo bridged audio amplifier 460d1cf88a8dfd447ef499c31ce2691a345731f8 Solar PV Calculator 0 752 2954 2017-12-28T20:50:04Z Admin 1 Created page with " https://docs.google.com/spreadsheets/d/1b3u9-lkZjNPdynLhgegvivqpMMoflNTdp94ZSKe2AH4/edit?usp=sharing" wikitext text/x-wiki https://docs.google.com/spreadsheets/d/1b3u9-lkZjNPdynLhgegvivqpMMoflNTdp94ZSKe2AH4/edit?usp=sharing 8c3ff00bad611a00cf61d0b257c78902f2b84bc9 Datasheets 0 14 2955 2789 2018-04-11T03:07:58Z Admin 1 wikitext text/x-wiki A datasheet, data sheet, or spec sheet is a document summarizing the performance and other technical characteristics of a product, machine, component (e.g. an electronic component), material, a subsystem (e.g. a power supply) or software in sufficient detail to be used by a design engineer to integrate the component into a system. Typically, a datasheet is created by the component/subsystem/software manufacturer and begins with an introductory page describing the rest of the document, followed by listings of specific characteristics, with further information on the connectivity of the devices. In cases where there is relevant source code to include, it is usually attached near the end of the document or separated into another file. Depending on the specific purpose, a data sheet may offer an average value, a typical value, a typical range, engineering tolerances,or a nominal value. The type and source of data are usually stated on the data sheet. A data sheet is usually used for technical communication to describe technical characteristics of an item or product. It can be published by the manufacturer to help people choose products or to help use the products. By contrast, a technical specification is an explicit set of requirements to be satisfied by a material, product, or service. Below follows a collection of data sheets used to complete some of my projects. ==Microcontrollers== * [[File:Attiny85-summary.pdf]] (summary) * [[Image:ATtiny85.pdf]] (complete) * [[Image:ATtiny84.pdf]] (summary) * [[File:Attiny84 large.pdf]] (complete) * [[Image:ATmega328.pdf]] (summary) * [[File:ATmega328 datasheet complete.pdf]] (summary) ==Sensors== * [[Image:DS1820.pdf]] * [[Image:DS18S20.pdf]] ==Linear Voltage Regulators== * [[File:LM78L05.pdf]] Low cost, 5V, 100mA regulator (TO-92 package) * [[File:LM7805.pdf]] Low cost, 5V, 1A regulator (TO-220 package) * [[File:LM2940.pdf]] Low drop-out, 5V, 1A regulator (TO-220 package) ==DC-to-DC buck and/or boost converters== * [[File:LTC3525.pdf]] 3V, 3.3V or 5V, 400mA boost converter (SC-70 package) ==Special Purpose CMOS IC's== * [[Image:74HC595.pdf]] 8-bit Serial Shift Register ==Liquid Crystal Displays== * [[Image:SD1602G.pdf]] 16x2 LCD * [[Image:Nokia5110-LCD.pdf]] Nokia 84x48 LCD (as used in 3310 and 5110 phones) ==RealTime Clocks== * [[File:ISL1208.pdf]] I2C programmable RTC ==Storage== * [[File:24LC256-512.pdf]] I2C EEPROM 256kb (32kB) ==Communication Protocols== * [[Image:I2C-UM10204.pdf]] I2C-bus specification and user manual * [[File:Easycomm.txt]] Easycomm1 and Easycomm2 rotor protocol ==List of common Decibel, Watts and Vpp values== * [[powerdbvolts]] f472581804263b799cec7433ea5606d847321978 Powerdbvolts 0 753 2976 2975 2018-04-11T05:23:09Z Admin 1 wikitext text/x-wiki {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -120 |1.0fW |632nV |- | -119 |1.3fW |710nV |- | -118 |1.6fW |796nV |- | -117 |2.0fW |893nV |- | -116 |2.5fW |1.0&mu;V |- | -115 |3.2fW |1.1&mu;V |- | -114 |4.0fW |1.3&mu;V |- | -113 |5.0fW |1.4&mu;V |- | -112 |6.3fW |1.6&mu;V |- | -111 |7.9fW |1.8&mu;V |- | -110 |10.0fW |2.0&mu;V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -110 |10fW |2.0&mu;V |- | -109 |13fW |2.2&mu;V |- | -108 |16fW |2.5&mu;V |- | -107 |20fW |2.8&mu;V |- | -106 |25fW |3.2&mu;V |- | -105 |32fW |3.6&mu;V |- | -104 |40fW |4.0&mu;V |- | -103 |50fW |4.5&mu;V |- | -102 |63fW |5.0&mu;V |- | -101 |79fW |5.6&mu;V |- | -100 |100fW |6.3&mu;V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -100 |100fW |6.3&mu;V |- | -99 |126fW |7.1&mu;V |- | -98 |158fW |8.0&mu;V |- | -97 |200fW |8.9&mu;V |- | -96 |251fW |10&mu;V |- | -95 |316fW |11&mu;V |- | -94 |398fW |13&mu;V |- | -93 |501fW |14&mu;V |- | -92 |631fW |16&mu;V |- | -91 |794fW |18&mu;V |- | -90 |1.0pW |20&mu;V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -90 |1.0pW |20&mu;V |- | -89 |1.3pW |22&mu;V |- | -88 |1.6pW |25&mu;V |- | -87 |2.0pW |28&mu;V |- | -86 |2.5pW |32&mu;V |- | -85 |3.2pW |36&mu;V |- | -84 |4.0pW |40&mu;V |- | -83 |5.0pW |45&mu;V |- | -82 |6.3pW |50&mu;V |- | -81 |7.9pW |56&mu;V |- | -80 |10pW |63&mu;V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -80 |10pW |63&mu;V |- | -79 |13pW |71&mu;V |- | -78 |16pW |80&mu;V |- | -77 |20pW |89&mu;V |- | -76 |25pW |100&mu;V |- | -75 |32pW |112&mu;V |- | -74 |40pW |126&mu;V |- | -73 |50pW |142&mu;V |- | -72 |63pW |159&mu;V |- | -71 |79pW |178&mu;V |- | -70 |100pW |200&mu;V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -70 |100pW |200&mu;V |- | -69 |126pW |224&mu;V |- | -68 |158pW |252&mu;V |- | -67 |200pW |283&mu;V |- | -66 |251pW |317&mu;V |- | -65 |316pW |356&mu;V |- | -64 |398pW |399&mu;V |- | -63 |501pW |448&mu;V |- | -62 |631pW |502&mu;V |- | -61 |794pW |564&mu;V |- | -60 |1.0nW |632&mu;V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -60 |1.0nW |632&mu;V |- | -59 |1.3nW |710&mu;V |- | -58 |1.6nW |796&mu;V |- | -57 |2.0nW |893&mu;V |- | -56 |2.5nW |1.0mV |- | -55 |3.2nW |1.1mV |- | -54 |4.0nW |1.3mV |- | -53 |5.0nW |1.4mV |- | -52 |6.3nW |1.6mV |- | -51 |7.9nW |1.8mV |- | -50 |10nW |2.0mV |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -50 |10nW |2.0mV |- | -49 |13nW |2.2mV |- | -48 |16nW |2.5mV |- | -47 |20nW |2.8mV |- | -46 |25nW |3.2mV |- | -45 |32nW |3.6mV |- | -44 |40nW |4.0mV |- | -43 |50nW |4.5mV |- | -42 |63nW |5.0mV |- | -41 |79nW |5.6mV |- | -40 |100nW |6.3mV |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -40 |100nW |6.3mV |- | -39 |126nW |7.1mV |- | -38 |158nW |8.0mV |- | -37 |200nW |8.9mV |- | -36 |251nW |10mV |- | -35 |316nW |11mV |- | -34 |398nW |13mV |- | -33 |501nW |14mV |- | -32 |631nW |16mV |- | -31 |794nW |18mV |- | -30 |1.0&mu;W |20mV |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -30 |1.0&mu;W |20mV |- | -29 |1.3&mu;W |22mV |- | -28 |1.6&mu;W |25mV |- | -27 |2.0&mu;W |28mV |- | -26 |2.5&mu;W |32mV |- | -25 |3.2&mu;W |36mV |- | -24 |4.0&mu;W |40mV |- | -23 |5.0&mu;W |45mV |- | -22 |6.3&mu;W |50mV |- | -21 |7.9&mu;W |56mV |- | -20 |10&mu;W |63mV |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -20 |10&mu;W |63mV |- | -19 |13&mu;W |71mV |- | -18 |16&mu;W |80mV |- | -17 |20&mu;W |89mV |- | -16 |25&mu;W |100mV |- | -15 |32&mu;W |112mV |- | -14 |40&mu;W |126mV |- | -13 |50&mu;W |142mV |- | -12 |63&mu;W |159mV |- | -11 |79&mu;W |178mV |- | -10 |100&mu;W |200mV |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | -10 |100&mu;W |200mV |- | -9 |126&mu;W |224mV |- | -8 |158&mu;W |252mV |- | -7 |200&mu;W |283mV |- | -6 |251&mu;W |317mV |- | -5 |316&mu;W |356mV |- | -4 |398&mu;W |399mV |- | -3 |501&mu;W |448mV |- | -2 |631&mu;W |502mV |- | -1 |794&mu;W |564mV |- | 0 |1mW |632mV |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | 0 |1mW |632mV |- | 1 |1.3mW |710mV |- | 2 |1.6mW |796mV |- | 3 |2.0mW |893mV |- | 4 |2.5mW |1.0V |- | 5 |3.2mW |1.1V |- | 6 |4.0mW |1.3V |- | 7 |5.0mW |1.4V |- | 8 |6.3mW |1.6V |- | 9 |7.9mW |1.8V |- | 10 |10mW |2.0V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | 10 |10mW |2.0V |- | 11 |13mW |2.2V |- | 12 |16mW |2.5V |- | 13 |20mW |2.8V |- | 14 |25mW |3.2V |- | 15 |32mW |3.6V |- | 16 |40mW |4.0V |- | 17 |50mW |4.5V |- | 18 |63mW |5.0V |- | 19 |79mW |5.6V |- | 20 |100mW |6.3V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | 20 |100mW |6.3V |- | 21 |126mW |7.1V |- | 22 |158mW |8.0V |- | 23 |200mW |8.9V |- | 24 |251mW |10.0V |- | 25 |316mW |11.2V |- | 26 |398mW |12.6V |- | 27 |501mW |14.2V |- | 28 |631mW |15.9V |- | 29 |794mW |17.8V |- | 30 |1W |20.0V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | 30 |1W |20.0V |- | 31 |1.3W |22.4V |- | 32 |1.6W |25.2V |- | 33 |2.0W |28.3V |- | 34 |2.5W |31.7V |- | 35 |3.2W |35.6V |- | 36 |4.0W |39.9V |- | 37 |5.0W |44.8V |- | 38 |6.3W |50.2V |- | 39 |7.9W |56.4V |- | 40 |10W |63.2V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | 40 |10W |63V |- | 41 |13W |71V |- | 42 |16W |80V |- | 43 |20W |89V |- | 44 |25W |100V |- | 45 |32W |113V |- | 46 |40W |126V |- | 47 |50W |142V |- | 48 |63W |159V |- | 49 |79W |178V |- | 50 |100W |200V |- |} {| style="text-align:right; background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>dBm</b> |style="background-color:#f2f2f2;"|<b>Power</b> |style="background-color:#f2f2f2;"|<b>Vpp</b> |- | 50 |100W |200V |- | 51 |126W |224V |- | 52 |158W |252V |- | 53 |200W |283V |- | 54 |251W |317V |- | 55 |316W |356V |- | 56 |398W |399V |- | 57 |501W |448V |- | 58 |631W |502V |- | 59 |794W |564V |- | 60 |1kW |633V |- |} 39e1ac79cfda4a3cea62ed67ef4ef38b6b92f17f File:AD8307A Power-Meter Arduino-Nano.jpg 6 755 2981 2018-04-16T10:46:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:PowerMeter mcu inside.jpg 6 756 2983 2018-04-16T10:47:57Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AD8307-rf-head.jpg 6 757 2994 2018-04-20T01:01:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Eachine-TX801.jpg 6 758 3001 2018-06-26T22:48:32Z Admin 1 5.8GHz AV transmitter wikitext text/x-wiki == Summary == 5.8GHz AV transmitter eac275531ea06925583538b7e2acf740a74f0059 File:1200TVL-CMOS-Camera.jpg 6 760 3005 2018-06-26T22:57:56Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Cameras 0 761 3007 3006 2018-06-26T22:59:07Z Admin 1 wikitext text/x-wiki In 2017 I bought the "Orange 1200TVL CMOS 2.5mm/2.8mm 130/120 Degree 16:9 Mini FPV Camera PAL/NTSC 5V-12V For Micro Racer Quadcopter" from Banggood for about $17. [[File:1200TVL-CMOS-Camera.jpg]] Description: Item Name : 1200TVL Mini Camera Size : 25mm x 25mm Weight : 9.5g Format : PAL/NTSC Optional PAL: 1920H×1080V(1MP) NTSC: 1020H×1920V (1MP) Horizontal Resolution : 1000TVL Video Output : 1.0Vp-p/75Ω AGC : 0.25/0.50/0.75/1.00 4 levels adjustable, up to max. 55dB Min. illumination : 0.005 WB : ON/OFF Exposure Type: electronic exposure Electronic Shutter : 1/50(1/60) - 1/100000 second Gamma Correction : 0.45/1.0 Synchronization Mode : inter-sync Lens : 2.5mm 130°/2.8mm 120° optional Specification : Working Voltage : DC5-12V(wide voltage , measured 5-13V) Working Current : 70mA(ow power consumption) Working Temp. : -20℃--60℃ Wetness: 0% ~ 98% https://www.banggood.com/Orange-1200TVL-2_5mm2_8mm-130120-Degree-Mini-FPV-Camera-PALNTSC-5V-12V-For-Micro-Racer-Quadcopter-p-1150403.html?rmmds=search&cur_warehouse=CN 93bee8f31cb9add56fa3acfae39d843dc7b3b915 2018 VK Contest Dates 0 762 3009 2018-07-01T10:59:01Z Admin 1 Created page with "2018 VK Contest Dates (Phone) <pre> Date Name Start End (UTC) Bands ------------------------------------------------------------------------..." wikitext text/x-wiki 2018 VK Contest Dates (Phone) <pre> Date Name Start End (UTC) Bands ------------------------------------------------------------------------ 17-18 Mar John Moyle 0100 - 0059 (24hrs) All bands 5 May Harry Angel 1000 - 1146 (106mins) 80m 21 Jul VK Trans Tasman 0800 - 1400 (6hrs) 160m, 80m, 40m 11-12 Aug Remembrance Day 0300 - 0300 (24hrs) All bands 18-19 Aug Intl Lighthouse 0100 - 2359 (48hrs) All bands 6-7 Oct Oceania DX 0800 - 0800 (24hrs) 160/80/40/20/15/10m </pre> Sources: * http://www.wia.org.au/members/contests/about/ * https://illw.net/ a70fb7b9eeaa1f4447f001d364598534e675d4a7 Quadcopters 0 734 3010 2924 2018-09-02T03:04:31Z Admin 1 wikitext text/x-wiki Remote controlled multi-rotor flying platform These pages link to the various pieces of equipment I use for flying my quadcopter. * [[quad-frames]] * [[transmitters]] * [[receivers]] * [[flightcontrollers]] * [[ESC]] (Electronic Speed Controllers) * [[motors]] * [[antennas]] * [[batteries]] * [[battery management]] (chargers and balancers) ===FPV (first person video)=== * [[OSD]] (on-screen displays) * [[cameras]] * [[VTX]] (Video Transmitters) * [[video receivers]] * [[DVR]] (digital video recording) * [[goggles]] 1a2060ad6c7fd7dc455f4b7b06ee944a0045a4e8 File:Rappewillem 200x80.jpg 6 763 3011 2018-09-22T09:51:56Z Admin 1 Rappe Willem Moet Blijven! wikitext text/x-wiki == Summary == Rappe Willem Moet Blijven! d9046855b6248f3a319bc93162d2fc18354549f8 File:Rappewillem 1554x618.jpg 6 764 3014 2018-09-22T09:55:42Z Admin 1 Rappe Willem Moet Blijven! (Cafe de Ster Groningen) wikitext text/x-wiki == Summary == Rappe Willem Moet Blijven! (Cafe de Ster Groningen) 38355eb45c8118a920cd43f21c697164a973b99b Battery chargers 0 574 3018 2345 2018-12-02T04:21:28Z Admin 1 wikitext text/x-wiki Here is a list of battery chargers that I have used for various projects. The chargers are divided in these three categories: ==mains powered== ===12V=== <gallery caption="Powertech MB-3526 Battery Charger" widths="150px" heights="150px" perrow="2"> File:Powertech-MB-3526.jpg|Powertech MB-3526 File:MB3526-charge-example.png|Example recharge </gallery> [[12V SLA Charge Time]] ==solar charge controllers== ===12V=== <gallery caption="KEMO M149 Solar Charge Controller" widths="150px" heights="150px" perrow="2"> File:Kemo M149 solar-charge-controller.jpg|Kemo M149 File:KEMO-M149 charge-example.png|Example recharge </gallery> <gallery caption="Powertech MP-3129 Solar Charge Controller" widths="150px" heights="150px" perrow="3"> File:Powertech MP3129 solar-charge-controller.jpg|Powertech MP-3129 File:MP3129-charge-example.png|Example recharge File:MP3129 manual.pdf|User Manual </gallery> <gallery caption="Blue PWM Solar Charge Controller" widths="150px" heights="150px" perrow="3"> File:Solar-Charge-Controller pwm blue.jpg|PWM Charger File:Blue-PWM-SCC-Example.png|Example recharge File:Blue-PWM-Solar-Charge-Controller manual.jpg|User Manual </gallery> <gallery caption="CMP12/24 Black-Orange Solar Charge Controller" widths="150px" heights="150px" perrow="2"> File:CMP12-24 Black-Orange Solar-Charge-Controller.jpg|PWM Charger File:CMP12-24 Black-Orange Solar-Charger manual.pdf|User Manual </gallery> ==low power== ===4.2V Li-Po/Li-Ion=== <gallery caption="Microchip MCP-73831T Charge Controller" widths="150px" heights="150px" perrow="2"> File:MCP73831.jpg|MCP73831T File:MCP73831t.pdf|Datasheet </gallery> <gallery caption="Linear Technologies LTC-4054 Charge Controller" widths="150px" heights="150px" perrow="3"> File:LTC4054.jpg|LTC4054-4.2 File:LTC-4054-charge-example.png|Example recharge File:LTC-4054-42xf.pdf|Datasheet </gallery> f7d82dc27549c9601cca50da0802fd30891cb455 File:12V 1-3Ah-SLA battery.jpg 6 765 3019 2018-12-02T04:26:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Battery-powered-PIR-LEDs.jpg 6 767 3023 2018-12-02T04:51:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-11-21 173511-first1000.png 6 768 3025 2018-12-02T04:55:59Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-11-21 173511-after1000.png 6 769 3026 2018-12-02T04:56:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-11-24 121639-first1000.png 6 770 3029 2018-12-02T05:19:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-11-24 121639-after1000.png 6 771 3030 2018-12-02T05:20:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-11-26 171610-first1000.png 6 772 3037 2018-12-02T05:44:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-11-26 171610-after1000.png 6 773 3038 2018-12-02T05:44:45Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Battery-charger-curve.jpg 6 774 3042 2018-12-02T06:01:16Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-12-01 090327-first1000.png 6 775 3046 2018-12-02T06:11:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-12-01 090327-after1000.png 6 776 3047 2018-12-02T06:12:21Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-12-02 171605-first1000.png 6 777 3048 2018-12-02T06:17:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Datalogger 2018-12-02 171605-after1000.png 6 778 3049 2018-12-02T06:18:33Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 12V SLA Charge Time 0 766 3060 3059 2018-12-02T07:28:16Z Admin 1 wikitext text/x-wiki When I first purchased this charger I was pleased that it appeared to charge batteries as advertised. But after a while I started to wonder if there were any smarts inside the charger. [[File:Powertech-MB-3526.jpg]] To demonstrate this, I decided to put a small 1.3Ah SLA battery to the test. [[File:Battery-powered-PIR-LEDs.jpg]] I use this battery to power a small PIR-activated night-light with 3x LEDs. Power consumption is minimal and it only comes on a few times per day so I expect it to last for many weeks on a single charge. Standby current draw is 37uA, and when the PIR detects motion it activates the LEDs and power consumption goes up to about 30mA for 5 minutes. After letting it run for a week I decided to measure the voltage and was surprised to see that it was already down to 11.8 Volts. So I put in on the charger and decided so come back later until the charger indicated with a green light that the battery was fully charged. At first I didn't measure the final voltage after charge, and simply put the battery powered night-light back on the window sill, expecting not have to recharge it for at least several weeks. Curiosity got the better of me after a week and I measured the battery voltage again. 11.8V What the..? Clearly something wasn't right here. I put it back on the charger, but this time I also connected my voltage data-logger. [[File:Datalogger 2018-11-21 173511-first1000.png]] This first graph spans about 30 seconds of activity (1000 samples worth) and clearly shows the initial starting voltage of about 11.8V. About 15 seconds after starting the data-logger I connect the charger and let it sit there until the green light comes on. After about 15 seconds the battery already reaches 14.8V. [[File:Datalogger 2018-11-21 173511-after1000.png]] The second graph spans about 67 hours (about 2.7 days) and shows a few interesting bits. First, on the far left you can just see the voltage coming down from 12.2V and then stopping at about 11.9V. The green light had already come on and I believed that this indicated that the battery was full. I must have had the charger connected for maybe 5 minutes and simply thought that the charger did its work very quickly (Not so! Read on...). I put the night-light back on the window sill with the data-logger still connected. After about 2 days I wanted to find out how my battery was doing and decided to measure the voltage. To my surprise the voltage had dropped down again to 11.7V, but now I had the data-logger graphs to hopefully reveal what had happened. Looking at the graphs above it clearly shows that the power consumption is fine during normal operation, but the battery just isn't charged full enough. How full? Well, that is part of the debate, but some common indicators from batteryuniversity.com and other sites say that for a 12V SLA battery the full-state is around 12.8V. My battery charger however was already switching over to the green 'full' light after about 60 seconds, and stop charging at about 12.2V. Or did it? I wondered what would happen if I would let the battery charger stay connected AFTER the green light had come on for a few hours and see what the data-logger could reveal. Again, I hooked up the battery charger, and noticed that the green light came on after 60 seconds already. [[File:Datalogger 2018-11-24 121639-first1000.png]] The above graph shows that the battery reaches 14.8V within 30 seconds of charging. The long-term picture over 68 hours, including 2 hours of trickle charge shows this: [[File:Datalogger 2018-11-24 121639-after1000.png]] Here, I let the charger stay connected for another 2 hours AFTER the green had come on. On the far left you can see the battery voltage coming down from 14.8V and stop at about 12.1V and then rises up slowly to 12.4V over a period of about 2 hours. This is the behaviour of the trickle-charge feature of the charger. It is after these 2 hours that I disconnect the battery from the charger and put the night-light back on the window sill and let it sit there for the next two days. When I saw this graph I realised that I was on to something. The charger does not use the green light to show that the battery is full, but only indicates that it has reached about 15V and then then switches over to trickle-charge. The two hour trickle-charge raised the battery voltage a bit higher than it was before. Previously I had been putting the battery powered night-light away with just 11.9V of charge, I could now see that after 2 hours of trickle-charge the battery was holding charge at 12.0V. This led me to experiment with a much longer trickle-charge period. I measured up the voltage after about 2 days of use and saw 11.7V again, but that no longer surprised me. Now I wanted to see what would happen if I let it sit on trickle-charge for about 3 hours. I connected the battery charger about 10 seconds after starting the data-logger. [[File:Datalogger 2018-11-26 171610-first1000.png]] This shows that in the first 30 seconds the battery quickly shoots up to 15V and then the charger backs off and picks up again at about 12V. Interesting. My only explanation for why we see this up-and-down behaviour in one 30-second graph is that the battery may have been in healthier state. Maybe just 2 hours of trickle-charge already helped. [[File:Datalogger 2018-11-26 171610-after1000.png]] The picture looks similar as before over a 52-hour period. However, the 3-hour trickle-charge brings the battery voltage up to around 12.5V (this was 12.4V with a 2-hour trickle-charge). There is no sign that the trickle-charge has finished as the battery voltage is well below the ultimate 12.8V (or even 14.4V as some graphs show). Now I'm beginning to understand these charge curves: [[File:Battery-charger-curve.jpg]] Recommended charge voltages for 12V and 24V Lead-Acid batteries. This means we can leave the trickle-charge on for a much longer period. Let's see what a trickle-charge over 5 hours looks like: [[File:Datalogger 2018-12-01 090327-first1000.png]] Again, we see a fairly quick charge to 15V; the green light on the charger comes on. [[File:Datalogger 2018-12-01 090327-after1000.png]] After leaving the battery connected for 5 hours on trickle-charge, the voltage rises steadily to about 12.75V. What's even better, the battery voltage after a runtime of 5 days is now still just above 12.0V. This is starting to look better and better. Let's try trickle-charging for double that, just over 10 hours. The battery reaches 15V quicker than before (probably because we started at 11.9V). [[File:Datalogger 2018-12-02 171605-first1000.png]] And we can see that the trickle-charging has brought the battery voltage before disconnect up to a maximum 13.4V. [[File:Datalogger 2018-12-02 171605-after1000.png]] Look at that! The final resting voltage after trickle-charging is about 12.6V. This should give the application a chance to last the weeks' lifespan I expected in the first place. Only now am I realising that I never really charged this battery properly with said charger. According to the Battery Charge Curve graph, the Float charge is around 13.6V so I can easily leave the charger connected for a few more hours. This would probably be the only way to see if the charger really stops at a certain voltage. (waiting for testing to complete, watch this space..) 98eae6ef39768a0b4cf9885f30cfabea5e20314f VTX 0 759 3063 3062 2018-12-10T02:48:36Z Admin 1 wikitext text/x-wiki In 2017 I bought the Eachine TX801 5.8G 72CH 0.01mW 5mW 25mW 50mW 100mW 200mW 400mW 600mW Switched AV VTX FPV Transmitter for about $27 on Banggood. [[File:Eachine-TX801.jpg]] Description: Brand Name : Eachine Item Name : TX801 Transmitter Antenna Gain: 3Dbi Antenna Conenctor : RP-SMA Frequency: 5325-5945MHZ Channel : 72CH Transmitting Power: 0.01MW/5MW/25MW/50MW/100MW/200MW/400MW/600MW Switchable Video Format: NTSC/PAL Working Current: (MAX)7V-550mA; 12V-300mA; 24V-160mA Audio Bandwidth : 6.5MHZ Video Bandwidth: 18MHZ Audio Carrier : 1Vp-p(1KHZ) AF Input Impedance : 10KΩ Working Voltage : 7-24V Output Voltage : 5V Weight :7.3g Size :28*20*8MM Cable : JST-GH 1.25mm 5P to TJC8 2.54mm 3P Blue : GND Yellow : Video Red : Output Voltage Features : * 8 power levels switchable: 0.01MW/5MW/25MW/50MW/100MW/200MW/400MW/600MW * 72 channels, cover all 5.8G frequency. * With Microphone, support audio transmission * 5V output, max working current 550mA * Multi-channel synchronization does not interfere with each other ===7-segment display=== The 7-segment display cycles between three values. * Channel (1 - 8) [solid] * Band (A, b, E, F, r, U, o, L, H) [solid] * Power (1 - 8) [blinking] The power levels are: 1 10uW (pit mode) 2 5mW 3 25mW (max power for racing) 4 50mW 5 100mW 6 200mW 7 400mW 8 600mW https://www.banggood.com/Eachine-TX801-5_8G-72CH-0_01MW5MW25MW50MW100MW200MW400MW600MW-Switched-AV-VTX-FPV-Transmitter-p-1147691.html?cur_warehouse=USA 1b8d4bfd8295047d6ea55fcf4a0c06064c2cb836 Nature 0 326 3064 1474 2018-12-29T22:09:57Z Admin 1 wikitext text/x-wiki * [[Nature in and around our house]] * [[intriguing matters]] 3b82916df8df205bde4973a03f46fe775d14f3b6 Intriguing matters 0 779 3067 3066 2018-12-29T22:30:44Z Admin 1 wikitext text/x-wiki ===Why is the sky dark at night?=== * red-shift (to infrared) causes far away stars to be invisible to the human eye * universe not old enough to have stars everywhere ===Why is glass transparent?=== * in specific atoms where the electron energy gap is too high for photons with visible wavelengths to excite the electrons into a higher energy level, the photon is not absorbed and will pass through. ===Why are there two tides per 24h on earth when there's just one moon?=== * water and earth are pulled on the near side, lagging water bulge on the far side. 10728e249c9bfd9a954d45ff392c0812a706e5d7 Ionosphere 0 780 3088 3087 2019-03-18T21:34:18Z Admin 1 wikitext text/x-wiki The ionosphere is defined as the layer of the Earth's atmosphere that is ionized by solar and cosmic radiation. It lies 75-1000 km (46-621 miles) above the Earth. (The Earth's radius is 6370 km, so the thickness of the ionosphere is quite tiny compared with the size of Earth.) ===Layers:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Layer</b> |style="background-color:#f2f2f2;"|<b>Height</b> |style="background-color:#f2f2f2;"|<b>Effect</b> |style="background-color:#f2f2f2;"|<b>Active</b> |style="background-color:#f2f2f2;"|<b>Daytime Characteristics</b> |style="background-color:#f2f2f2;"|<b>Night time Characteristics</b> |style="background-color:#f2f2f2;"|<b>Usage</b> |- |F2 |150 - 500km |refract |day and night |Refracts below MUF (~30MHz) |Refracts below MUF (~30MHz) |night-time DX |- |F1 |150 - 500km |refract |daytime |Refracts below MUF (~30MHz) |weak refraction | |- |Es |? |refract |Sporadic |Refracts below 50MHz |Refracts below 50MHz |DX |- |E |90 - 150km |refract |daytime |Refracts below 10MHz |weak refraction after sunset |working greyline DX |- |D |60 - 90km |absorb |nighttime |Attenuates <10MHz peak attenuation at noon |minimal |local MF and low HF stations during the day |} ===Bands:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Band</b> |style="background-color:#f2f2f2;"|<b>Frequency</b> |style="background-color:#f2f2f2;"|<b>Best at</b> |style="background-color:#f2f2f2;"|<b>Worst at</b> |style="background-color:#f2f2f2;"|<b>Typical use</b> |- |630m |470kHz |Night |Day |only usable during the night, local |- |160m |1.8MHz |Night |Day |only usable during the night, local |- |80m |3.6MHz |Night |daytime |DX at night, local during the day |- |40m |7.1MHz |Night | |DX at night, local during the day |- |30m |10MHz | | | |- |20m |14.1MHz |day and night | |most reliable DX band |- |15m |21MHz |day and night | | |- |10m |28MHz |day |night |daytime to early evening |- |6m |50MHz |day |night |daytime to early evening |} de6a77c342d09c322863b371ce9e4d4b60421af7 Observations of the Australian culture by a Dutch immigrant 0 201 3092 3091 2019-04-20T08:29:57Z Admin 1 wikitext text/x-wiki In 2001 I immigrated from the Netherlands to Australia. Since then I have worked and lived in various places. During this time I noticed some interesting details of the Australian land and culture that were not be obvious at first. You may find these details useful when visiting Australia as a tourist. This page further describes some of those details. Some if them are supposed to be funny, so have a chuckle! :-) ==Housing== * Most rent is charged per week or per fortnight * Many houses are not built with insulation in mind. * Be sure to find single-glasing, gaps around most doors and no hallway as a wind-buffer. * Most houses do not have central heating so a small electric heater or putting on an extra jumper are your options if a reverse-cycle air-conditioning system is not installed. * Door handles are often knobs, making them unusable for people that have poor grip strentgh. * Many mailboxes are too small to receive a straight A4 sheet mail pieces ==Working== * Most salaries are paid weekly or fortnightly. * Staff birthdays are usually ignored. ==Cities== * Garbage is collected even on public holidays such as Christmas day and New Year's day. * Street names are not unique in a city (e.g. in Newcastle, there is a George Street in Mayfield East, Wallsend, North Lambton, Tighes Hill and Highfields) ==Food== * Meat pies is a common food available in most road cafe's. It's a meat-filled pastry mini-pie, to be eaten hot, and can be served as-is or with a mushy peas/mash potato/gravy dressing. * Recycling of cans (glass, plastic or aluminium) and platic (bottle) crates is not available in most places. Only one state (South Australia) has implemented the system for empty bottles. ==Electrical== * 240V AC @ 50Hz with a flush plate connection socket. * In 2011 a bill was passed to prevent the sale of any incandescent light bulbs. Regardless whether these are better or worse for the environment, you will not be able to buy any traditional light bulbs. * most household light sockets are B22d (bajonet) but you can still find E-27 (screw) fittings as well. ==Trains== * Cheap fares on the regular CityRail lines. A weekday return ticket from Newcastle to Sydney (160km) is around $16 for an adult (2012 prices). ==Prices== * Unleaded Regular Petrol costs about $1.45/l (premium $1.65, gas $.., diesel $..) * The Australian dollar was 'above parity' with the USD for most of 2011 and is now around 99 USD-cents (May 2012). ==Road== * As per the British system, traffic keeps left. * Despite many signs indicating 'keep left unless overtaking', most drivers keep driving in the middle or right lanes. * Most Australians are never agressive or impatient until they drive a car. * Periodic road-safety tests for rego renewal do not check for engine emissions. ==Pedestrians== * as on the road, keep left when walking. You'll cause awkward situations and bump into people if you dont'. ==Language== * Slang: pluggers (flip flops, thongs), howyergoing (not too well, "I felt a bit howyergoing"), nail (cigarette), damage beers (drink beer). * Apart from the expected slang there are also some words that are used to 'culture up' some common day products: Medley (combination of various food products), Gourmet (special, in any form), rustic (rural), salsa (like Medley), Boutique (special) e87309d591f506ab34dd7d3df778ea4b94e56837 File:Rifle-magazine.jpg 6 781 3101 2019-04-22T11:33:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Rpi-rtl-sdr 0 381 3106 3105 2019-04-23T09:45:14Z Admin 1 wikitext text/x-wiki In 2013 I bought one of these cheap USB DVB-T RTL-SDR dongles. [[File:R820T.jpg|200px|thumb|none|R820T with remote control and antenna]] [[File:Rtlsdr r820t mini float.jpg|200px|thumb|none|Inside the R820T]] Details: <pre> Tuner Frequency Range Elonics E4000 52 - 2200 MHz with a gap from 1100 MHz to 1250 MHz (varies) VID PID Tuner Device Name 0x0bda 0x2838 E4000 ezcap USB 2.0 DVB-T/DAB/FM dongle </pre> Source: http://sdr.osmocom.org/trac/wiki/rtl-sdr It came with a small magnetic-base antenna and some software. Initially I used it on Windows and was able to receive signals between 50MHz - 1GHz. There are mods available to make them listen on lower frequencies (HF) but I got it to show aircraft's transponder messages using RTL1090. Combined with Google Maps and VirtualRadar it is fascinating and fun to see what flies overhead.. [[File:RTL1090 and VirtualRadar.jpg|200px|thumb|none|VirtualRadar showing realtime transponder messages]] Currently I am attempting to use one of these dongles to act as an aprs receiver (Rx-Only iGate) for 2m (145.175MHz). If this works I will free up one of my handheld transceivers and I will be able to bring down the power consumption and size of the project considerably. Linux uses rtl_fm to communicate with these devices. This is what you should see when plugging in the RTL-SDR on a Debian 9 system: <pre> Apr 22 08:34:14 debian kernel: [ 358.696018] usb 8-5: new high-speed USB device number 6 using ehci-pci Apr 22 08:34:14 debian kernel: [ 358.856014] usb 8-5: New USB device found, idVendor=0bda, idProduct=2838 Apr 22 08:34:14 debian kernel: [ 358.856018] usb 8-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Apr 22 08:34:14 debian kernel: [ 358.856020] usb 8-5: Product: RTL2841UHIDIR Apr 22 08:34:14 debian kernel: [ 358.856022] usb 8-5: Manufacturer: Realtek Apr 22 08:34:14 debian kernel: [ 358.856024] usb 8-5: SerialNumber: 00000001 Apr 22 08:34:14 debian mtp-probe: checking bus 8, device 6: "/sys/devices/pci0000:00/0000:00:1d.7/usb8/8-5" Apr 22 08:34:14 debian mtp-probe: bus: 8, device: 6 was not an MTP device Apr 22 08:34:14 debian kernel: [ 359.121689] usb 8-5: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state Apr 22 08:34:14 debian kernel: [ 359.179365] usb 8-5: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer Apr 22 08:34:14 debian kernel: [ 359.179381] DVB: registering new adapter (Realtek RTL2832U reference design) Apr 22 08:34:14 debian kernel: [ 359.227932] i2c i2c-8: Added multiplexed i2c bus 9 Apr 22 08:34:14 debian kernel: [ 359.227934] rtl2832 8-0010: Realtek RTL2832 successfully attached Apr 22 08:34:14 debian kernel: [ 359.227943] usb 8-5: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))... Apr 22 08:34:14 debian kernel: [ 359.257263] r820t 9-001a: creating new instance Apr 22 08:34:14 debian kernel: [ 359.264401] r820t 9-001a: Rafael Micro r820t successfully identified Apr 22 08:34:14 debian kernel: [ 359.267992] rtl2832_sdr rtl2832_sdr.1.auto: Registered as swradio0 Apr 22 08:34:14 debian kernel: [ 359.267994] rtl2832_sdr rtl2832_sdr.1.auto: Realtek RTL2832 SDR attached Apr 22 08:34:14 debian kernel: [ 359.267996] rtl2832_sdr rtl2832_sdr.1.auto: SDR API is still slightly experimental and functionality changes may follow Apr 22 08:34:14 debian kernel: [ 359.274612] Registered IR keymap rc-empty Apr 22 08:34:14 debian kernel: [ 359.274710] input: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1d.7/usb8/8-5/rc/rc0/input32 Apr 22 08:34:14 debian kernel: [ 359.274811] rc rc0: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1d.7/usb8/8-5/rc/rc0 Apr 22 08:34:14 debian kernel: [ 359.276298] usb 8-5: dvb_usb_v2: schedule remote query interval to 200 msecs Apr 22 08:34:14 debian kernel: [ 359.286751] lirc_dev: IR Remote Control driver registered, major 244 Apr 22 08:34:14 debian kernel: [ 359.287484] usb 8-5: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected Apr 22 08:34:14 debian kernel: [ 359.287526] usbcore: registered new interface driver dvb_usb_rtl28xxu Apr 22 08:34:14 debian kernel: [ 359.344649] rc rc0: lirc_dev: driver ir-lirc-codec (dvb_usb_rtl28xxu) registered at minor = 0 Apr 22 08:34:14 debian kernel: [ 359.344651] IR LIRC bridge handler initialized </pre> test audio out by listening to a local FM broadcast station (update frequency for your area) <pre> rtl_fm -f 102.1M -s 170k -r 44100 -o 1 - | aplay -t raw -r 44100 -f S16_LE -c 1 -V mono - </pre> rtl_fm * -s 170k = Sampling bandwidth, use 170k for Wide-Band FM, 25k for Narrow-Band FM * -r 44100 = output sampling rate; must always be less than the Sampling Bandwidth * -o 1 = Oversampling NOTE: aplay * -c 1 = Channels (use 2 for stereo) * -V mono = VU-meter (show signal strength on screen) * -r 44100 = sampling rate (max=44100) (must match output sampling rate from rtl_fm) ===streaming over TCP=== If your device does not have a soundcard available you can stream the audio over the network. On the server: (required packages: apt-get install sox libsox-fmt-mp3 socat) <pre> rtl_fm -f 106.1M -s 170k -r 44100 - | sox -traw -r44100 -es -b16 -c1 -V1 - -tmp3 - | socat -u - TCP-LISTEN:8080 </pre> On the receiver: (required packages: apt-get install sox libsox-fmt-mp3 netcat) <pre> netcat <server> 8080 | play -t mp3 - </pre> ===testing APRS packets with MultimonNG=== Feeding a pre-recorded aprs packet in .wav format into multimon (it supports .mp3 as well) <pre> multimon-ng -a AFSK1200 -t wav -i <soundfile.wav> </pre> ===creating a Virtual Sound Device for the RTL-SDR=== This will allow us to simply connect soundmodem to the virtual sound device and all we need to do then is feed it with audio from the RTL-SDR. <pre> # modprobe snd-aloop -or- # echo "snd-aloop" >> /etc/modules (reboot) </pre> ===send RTL-SDR audio to the virtual sound device=== <pre> $ rtl_fm -f <freq> -s 100k -r 22050 - | aplay -r 22050 -f S16_LE -t raw -c 1 -D hw:Loopback,0,0 </pre> Confirm audio is coming through: <pre> arecord -f S16_LE -r 22050 -D plughw:1,1 - | aplay -r 22050 -f S16_LE - </pre> We can now use the virtual sound device to configure soundmodem (more info here when I get it to work!) 463bd2c140888e3c2af35ad28f5de21993864a7c Mcu 0138-AD8307-power-meter 0 782 3112 2019-05-30T11:01:49Z Admin 1 Admin moved page [[Mcu 0138-AD8307-power-meter]] to [[Mcu 0134-AD8307-power-meter]] wikitext text/x-wiki #REDIRECT [[Mcu 0134-AD8307-power-meter]] b243986e4fa00b4c15cf0fe1cb2399aa78730b88 Mcu 0134-AD8307-power-meter 0 754 3113 3111 2019-05-30T11:02:28Z Admin 1 wikitext text/x-wiki A while ago I decided to put together a small, fixed-frequency QRP CW tranceiver kit. At first I settled on the Pixie II, a small, fixed-frequency (around 7.023MHz) transceiver that outputs a Continuous-Wave carrier (CW, used for Morse Code) of around 2 Watts. The one I got was a cheap clone, readily available from eBay for about $6 (yes, six! dollars). The kit worked, but I found the clicking noises in the headphones when sending morse code to be very annoying, waay to loud for my ears. I researched a bit and came across a similar kit, but with better reviews, called the Forty-Niner. (http://www.norcalqrp.org/files/49er.pdf). Slightly larger parts count, single frequency, low power CW (about 2 Watts) and at $12 (whoa, double the price!) still cheap as chips. Sending morse with this kit was a lot kinder to my ears. It was with this kit that I made my first on-air morse code contacts. Then, in August 2017, Hans Summers from QRP-Labs finished the design of his QCX; a 5-Watt, single BAND, CW transceiver kit, on sale for just $49! (given the many more features this kit has, the price is still absurdly low). One thing I have always been wondering since my early days of playing around with the Pixie, is how much power is actually coming out the radio? Often, analogue power meters for HF are poor at showing accurate measurements when the needle is barely moving up from the resting position. Then I remembered, I once ordered samples of an Analog Devices chip that featured in some articles on (very) low-signal power measurements. Meet the AD8307 Log Amplifier: * DC output voltage of 25mV per dB * 92dB dynamic range * operating range of up to 500MHz The earliest articles (around 2001) used the AD8307 with additional opamps and driving a panel meter or digital multimeter to show the measurement values. Then, over time, came articles where the chip provided a signal to a microcontroller. Some used Microchip PICs, some used Atmels (many Arduinos have the Atmel ATMega328). Since an Arduino Nano clone can be purchased for about $5 on eBay I decided to make my own Low Power RF power meter with a 2x16 backlit LCD. The design is based around the AD8307 Log Amplifier, but the amplifier is housed in a separate box from the microcontroller and LCD to prevent it from picking up noise. In a later design I may try to incorporate it all in one box. For showing the measurements I chose to use a backlit 2x16 LCD. The specific one I had only had the ringle-row 24-pin data and power connector, but there exists a small add-on board that adds I2C functionality to the display. Although the 5V linear voltage regulator on the Arduino Nano is the main power supply for the ATMega chip (and a reference voltage for the internal ADC), I deciced to make use of a very stable external voltage reference in the form of the MCP1541; a TO-92 package, 4.096V voltage reference. This assures that the voltage coming out of the Log Amp is always referenced against a known, stable voltage, ensuring that the dBm measurement is as accurate as possible. [[File:AD8307A Power-Meter Arduino-Nano.jpg]] [[File:AD8307-rf-head.jpg]] [[File:PowerMeter mcu inside.jpg]] For more information on the details of this project: Original Article by Wes Hayward (W7ZOI) Bob Larkin (W7PUA) as published in QEX magazine, June 2001, pages 38-43 www.qsl.net/sz1a/download/build%20an%20rf%20power%20meter.pdf 4124ae7788ba7638033cd4df7c221f067fdd54f7 Mcu 0060-Voltage-data-logger 0 92 3117 331 2019-06-10T22:37:03Z Admin 1 wikitext text/x-wiki This project is outdated and now replaced by this project: http://www.marcelpost.com/wiki/index.php/Mcu_0084-voltage-datalogger 65a13d5919a9524e0a65dbccef5e0f39ddc518f3 Mcu 0084-voltage-datalogger 0 318 3119 3118 2019-06-10T23:45:38Z Admin 1 wikitext text/x-wiki Voltage data logger This project came to life when I wanted to measure my solar-panel assisted 124Ah SLA battery in my shed. I wanted to use the battery for powering other projects and realised that ideally I should be able to measure the voltage at regular intervals to make sure that the voltage isn't running too low. Ideally what I want for this device is: * a small handheld device * battery powered using common batteries * long battery lifetime * recharge batteries through USB port (not implemented yet) * measure input voltages between 0 - 15V (0 - 20V as it turns out) * (almost) no drain on the battery being measured * basic information through LCD module * able to set accurate sampling times (e.g. every n second(s), minute(s), hour(s), day(s)) * store measurements in the device * extract measurement data through USB connection to a PC ==Phase 1 determining the functional design== Similar as above: ===a small handheld device=== I wanted a device that I can bring to the voltage source that I am interested in, so anything running of mains power was not considered. Since I've made some other projects with microcontrollers I was keen to come up with a design that would fit in the palm of your hand, about similar in size to a TV remote control unit. The biggest components would be the LCD module and the battery compartment. ===energy efficient microcontroller=== I have been using the ATtiny85 and 84 microcontrollers for various projects over the years. When in sleep mode these devices draw about 5uA. These will be quite suitable for this project. Since I will be driving an LCD module I expect to need some extra IO hence the 14-pin ATtiny84 will be the device of choice for this project. [[File:T84.jpg|thumb|none|200px|ATtiny84]] ===battery powered using common batteries=== The ATtiny84 can be fed with anything between 2.7V and 5.5V DC. All the other components it needs to interface with can also run in this range. I decided to run the mcu and the main peripherals on 5V using a boost converter. The LTC3525 uses only 3 external components to output 5V and it's very simple to use. Soldering the chip required a steady hand. The total width of the chip is only 2mm and the pin spacing is about 0.65mm! [[File:LTC3525 recommended placement.png|thumb|none|250px|LTC3525 400mA Boost Converter]] [[File:LTC3525-ESC6-5-PBF SC70.jpg]] [[File:LTC3525.pdf]] Input voltage range for the boost converter is between 0.5V and 6V so this can easily be accomplished by feeding it with 2x AA or 2x AAA batteries. The handheld enclosure I can pick up easily from my local electronics store has a compartment for either 1x 9V or 2x AA batteries. Since the capacity of a 9V battery is very poor and the AAA are not a good fit for this enclosure I decided to go with 2x AA batteries. With rechargeable NiMH this will give us 3V and a capacity of around 2800mAh for two batteries in series and with non-rechargeable Alkaline it will be around 1500mAh for two in series. (I did not end up using a battery charger circuit in this version, so although rechargeable batteries will work, I will have to take them out and charge them externally with a separate charger) ===long battery lifetime=== The device should be able to take measurements for extended periods at regular intervals. My aim is to have enough power to have the device running on a single charge for at least a few months. We can achieve this by choosing low-power components and putting the microcontroller in sleep mode in between sampling. There are trade-offs of course. One being that the LCD module can not be constantly powered between measurements because it draws too much power. If we take a conservative approach and assume that we're running off non-rechargeable Alkaline batteries we will have about 1500mAh to go around. To get a lifetime of a year we must make sure the constant current drain does not exceed 171uA (1.5A / 8760 hours in a year). In the end it will be a combination of a much lower current drain for the sleep period (e.g. perhaps around 50uA) and a much higher current drain during the actual taking of the measurement (e.g. 20mA, to wake up the mcu, perhaps briefly enable the LCD, drive some FETs and/or transistors, activate a voltage divider, do the processing, etc..) and then go back into sleep mode. ===recharge batteries through USB port=== (Nice to have, but the current project design did not include this feature) Since USB will be used to retrieve data (see below) we can make use of the power lines of the USB port of the host system (PC or Laptop) to recharge the on-board batteries. There should be a physical switch as well as some intelligence to determine whether or not the unit contains rechargeable batteries but if it has then we can use up to 500mA from a USB port for a battery charging circuit. The battery charging circuit should be able to measure and adjust the voltage down from 5V (maximum of about 3.5V across 2x AA NiMH batteries in series) and it should also be able to measure and adjust the charging current (charging 2800mAh AA NiMH's at 1C would be 2.8A but we're limited by the USB port to about 500mA, so this results in about 17% of 1C). During charging the circuit should constantly measure voltage, current and battery temperature and time elapsed. It should automatically cut off when the batteries are charged. The charging time is probably going to be several hours but it should be a simple plug-in-and-wait scenario. UPDATE: the battery charging feature is useful to have, but after having used this datalogger for a few years now I haven't really had a need for it. Most times my datalogging needs were completed after a few days, with some experiments spanning a couple of months. The batteries last a long enough time to not have to worry about it and it also minimises the risk of leaking chemicals by having to remove batteries every once in a while anyway. ===(almost) no drain on the battery being measured=== A simple resistor voltage divider seems perfect for measuring the input voltage. However, if this device is used to measure the self-discharge of a single AA NiMH battery then it becomes apparent that the voltage divider needs to be disconnected when the mcu is in sleep mode. This can be achieved by adding a P-channel FET in series as they are voltage-controlled devices and draw almost no current (see schematic below). The microcontroller will be able to switch on the P-channel FET using an N-channel FET with practically no additional current draw and when the measurements have been taken the FETs are turned off and the voltage divider returns to high-impedance and will cause no further load on the voltage source to be tested. ===measure input voltages between 0 - 20V=== Most voltages that I am able to work with safely (and legally) in and around the house can be up to 24DC. When charging batteries the voltage can go up to 15 Volts so I thought 0 to 20 volts would be a good range. I should be able to change this to 0 - 50V or so if I want to measure Solar panel open-circuit voltage but that's not an immediate need. The ADC on the t84 can be set to 10 bits resolution, so with 20V maximum input voltage that could give a theoretical resolution of about 0.019uV per step. * NOTE: I have not yet taken the steps to incorporate a dedicated reference voltage chip as I'm fairly hopeful that the boost converter will produce a steady voltage. If however the sampling is not stable enough I will have to work on this part at a later stage. There is a possibility to use an internal 1.1V reference voltage. This is a feature inside the ATtiny84. All that's required to use this method is to change the voltage divider resistors with parts that bring down the maximum voltage to 1.1V and modify the code slightly to change a multiplier to a value that is calibrated with the real voltage. Shown below is a basic resistor voltage divider that will bring down the 0V to 20V input voltage to 0V to 5V for the ADC. [[File:0084-pfet-vdiv-0.png]] Although this technique will work fine, it will constantly discharge the voltage-device-to-measure a little bit through the resistors. At 12V the drain will be around 1.7mA. Even though this is not much, we want to limit this current drain as much as we can. Imagine a setup where a measurement is taken once per hour. The datalogger will be in sleep mode for 99.99% of the time and only wake up for a few ms to take a sample and then go back to sleep again. The above voltage divider will continue to drain the battery-under-test even when we're not taking samples. Ideally we want to 'disconnect' the voltage divider (between the V1 and R2) when the micro is in sleep mode. One way to do this is by using a FET (Field Effect Transistor) in series with the resistor voltage divider network. {{Info |info = '' In this design I will be using FETs to connect and disconnect the voltage divider from the device under test. To clear up some terminology I will be using the following terms in this document: * DUT The Device Under Test (dut), aka the DC voltage source we wish to measure. In most cases this will be a 12V battery, but it could also be a single AA battery at 1.5V. * FET Field Effect Transistor. I will be using enhancement-mode FETs and they will either be P-Channel (pfet) or N-Channel (nfet) types. * Conducting FET When the FET is conducting I will often use the terms 'low impedance', 'on' and 'conducting' interchangeably. * Non-Conducting FET When the FET is not conducting I will often use the terms 'high impedance', 'off' and 'non-conducting' interchangeably. * open vs close The terms 'open' and 'close' are mostly avoided as it can be interpreted both ways when saying that a fet is open. Do we mean it is open-circuit and not conducting or open for current to flow? '' }} The idea is that we want to have a FET at high impedance during sleep mode and aim for minimal (preferably no) drain on the device under test. Here are a few statements regarding a P-Channel FET: * If the Gate and the Source are both at the same voltage, a P-ch fet does not conduct. * The fet will (start to) conduct when the Source voltage is 'Vgs(th)' (a few volts) more positive than the Gate voltage. * Lowering the Gate voltage will turn the fet on (and make it conducting). Alternatively, increasing the Source voltage has the same effect. Let's walk through the following scenarios: * pfet off (high impedance) when not taking ADC measurements * pfet on (low impedance) when taking measurements Let's say we have a pfet on the high side with the Source connected to 5V+, the Drain through a 4k7 + 2k2 resistor voltage divider to Ground and the Gate held high by connecting it to a 100k pull-up resistor also to 5V+. [[File:0084-pfet-vdiv-1.png]] The difference between Source and Gate is practically 0V because they're both connected to +5V. A pfet with a Vgs(th) of around -3V will be in high-impedance mode. Therefore in the above schematic, the fet will be turned off and the voltage divider network will measure 0V. The drain on the DUT is very close to 0A, probably only a few nA. So for a pfet we can say: Vgate equals Vsource --> high impedance (aka 'disconnected') Vgate a few volts below Vsource --> low impedance (aka 'conducts') In the above schematic the ADC (the tap point that goes to the microcontroller to measure the voltage using the Analog-to-Digital Converter) will practically see 0V at any voltage because the pfet is always in high impedance. There will be almost no current drain on the Device Under Test (DUT, the voltage source such as a battery we wish to measure). This is exactly what we want when the microcontroller is not taking any measurements. Next we need to find a way to bring the p-fet into a conducting state. The easiest way is to bring the Gate to ground (0V). The difference between Vgate and Vsource will then be greater than Vgs(th) and Vsource will be more positive than Vgate. Doing so will turn the fet fully on, which is what we want to make use of the voltage divider network for ADC sampling. Let's introduce a microcontroller that will have an OUTPUT port that can control a device (here shown as a 'switch') that can control whether the P-ch fet's Gate is connected to ground or not. If it is connected to ground the 100k resistor will draw a bit of current, but this is negligible for the short duration of sampling. If it is left floating, the Gate of the p-fet will go high to the Voltage of the DUT. [[File:0084-pfet-vdiv-2.png]] The question is, what kind of a device does this? In theory a mechanical relay could do the trick, but it has three main drawbacks: due to its mechanical nature it has a very limited lifespan (metal fatigue), over time the arcing of the contacts could cause the relay from working properly and lastly the coil to engage the magnetic field is not very efficient and draws several milli-amps. The preferred solution is again a fet. This time however we'll use an N-Channel fet because we will be switching ground on and off. INSERT: blurb about why fets and not bjts Here is a proposed schematic that allows us to switch two fet's with with hardly any current and will have practically no current draw when the fets are turned off. [[File:0084-pfet-vdiv-3.png]] Here the OUT port of the microcontroller is simply a digital out that switches HIGH to 5V (supplied voltage from V2) or LOW to 0V. Setting these voltages to the gate of the N-ch fet (a common 2N7002) will cause it to respectively conduct or not. When the N-ch fet is conduciting (when supplied 5V) it will provide a path to ground for the Gate of the P-ch fet and we can take a sample from the voltage divider R3/R2 (the naming of the resistors may have changed with earlier schematics). There is however one big problem with this setup. The title of this section mentions that we wish to measure DC voltages from 0V to 20V. The current schematic will not be able to measure voltages lower than Vgs(th) than the P-ch fet is rated for. Let's see why this is the case: Here is a table that shows the various voltages of interest ===Table 1: on/off fet switching at 5V DUT=== {| class="wikitable" |+FET Gate voltages |- |V2 (uC) |V1 (DUT) |Vg Nfet |Nfet state |Vs Pfet |Vg Pfet |diff Vgs Pfet |Pfet state |Comments |- |5.0 |5.0 |0.0 |not conducting |5.0 |5.0 |< Vgs(th) |not conducting |uC Output LOW (0V), Resistor voltage-divider: OFF |- |5.0 |5.0 |5.0 |conducting |5.0 |0.0 |> Vgs(th) |conducting |uC Output HIGH (5V), Resistor voltage-divider: ON |} This table shows how the various voltages change when the microcontroller sets the OUT line from LOW to HIGH. For clarity I have added also the V1 and V2 sources, but it can be concluded that the maximum voltage the microcontroller can set on the OUT line is its Vcc voltage (i.e. 5V). Therefore, the Gate voltage on the N-Ch fet will never receive more than 5V. This is enough over overcome Vgs(th) on the N-ch fet as it's between Ground (0V) and the OUT HIGH (5V). We can conclude that Vg Nfet simply depends on whatever voltage is supplied to the micro by V2. In a similar fashion it can also be concluded that Vs Pfet is simply the voltage on the Device under Test (V1). Lastly (and this is the problem), in this arrangement Vg Pfet can only be set to 0V or 5V. To show where the issue is, let's measure DUT voltages from 5V down to 0V in half-volt steps. ===Table 2: measuring 0-5V DUT=== This table uses a P-Ch FET with a Vgs(th) of around 2.35V. This means that when the voltage on Vg comes to within 2.35V of Vs the fet will stop conducting (assuming that Vs is always equal to or greater than Vg). Watch the column showing the difference between Vg and Vs and it will become clear what is happening. {| class="wikitable" |+FET Gate voltages with DUT voltages between 0 - 5V |- |V2 (uC) |V1 (DUT) |Vg Nfet |Nfet state |Vs Pfet |Vg Pfet |diff Vgs Pfet |Pfet state |Comments |- |5.0 |5.0 |5.0 |conducting |5.0 |0.0 |> Vgs(th) |conducting |uC Output HIGH (5V), Difference Vgs(th) way greater than 2.35V, all good |- |5.0 |4.5 |5.0 |conducting |4.5 |0.0 |> Vgs(th) |conducting |Diff Vgs(th) around 4.5V, all good |- |5.0 |4.0 |5.0 |conducting |4.0 |0.0 |> Vgs(th) |conducting |Diff Vgs(th) around 4.0V, all good |- |5.0 |3.5 |5.0 |conducting |3.5 |0.0 |> Vgs(th) |conducting |Diff Vgs(th) around 3.5V, all good |- |5.0 |3.0 |5.0 |conducting |3.0 |0.0 |> Vgs(th) |conducting |Diff Vgs(th) around 3.0V, barey conducting |- |5.0 |2.5 |5.0 |conducting |2.5 |0.0 |~ Vgs(th) |half conducting |Diff Vgs(th) around 2.5V, linear region, pfet is going high impedance |- |5.0 |2.0 |5.0 |conducting |2.0 |0.0 |< Vgs(th) |not conducting |Diff Vgs(th) around 2.0V, pfet is high impedance, voltage to ADC is now 0V |- |5.0 |1.5 |5.0 |conducting |1.5 |0.0 |< Vgs(th) |not conducting |Diff Vgs(th) around 1.5V, pfet is high impedance, voltage to ADC is now 0V |- |5.0 |1.0 |5.0 |conducting |1.0 |0.0 |< Vgs(th) |not conducting |Diff Vgs(th) around 1.0V, pfet is high impedance, voltage to ADC is now 0V |- |5.0 |0.5 |5.0 |conducting |0.5 |0.0 |< Vgs(th) |not conducting |Diff Vgs(th) around 0.5V, pfet is high impedance, voltage to ADC is now 0V |} To illustrate this in a graph, here is a plot of two lines. The green line is the DUT voltage and the blue line is the voltage measured at the ADC tap point. [[File:0084-pfet-vdiv-4.png]] x-axis: DUT voltage, y-axis: ADC voltage Follow the ADC trace (blue line) from right-to-left and notice that for a DUT (green line) above 2.5V the ADC connected to the voltage-divider is able to get a proper reading, but as soon as the DUT voltage goes below 2.5V the pfet cannot open anymore and the voltage divider never gets connected to the DUT. It now becomes obvious that the pfet is ineffective when the difference between Vs and Vg is less than Vgs(th). So how can we measure DUT voltages between 0V - 2.5V ? Remember that the issue is that the difference between DUT voltage and 0V is less than Vgs(th)? If we can't increase the DUT voltage, why not go lower than 0V? A negative voltage. ===Negative bias to the P-FET=== Let's see what our results look like if we just look at providing -3V at the Gate of the pfet. [[File:0084-pfet-vdiv-5.png]] All the way down to 0V a perfect slope on the ADC tap point. This proves that providing a negative voltage will work. There are few simple techniques that can achieve this. If we pulse-charge a capacitor, prevent power going in the positive direction and provide a discharge path other than to ground we can get a pulsing negative voltage. With two caps and two diodes we can easily get to -4.7V which will be enough to properly 'close' the P-Channel FET for measurements close to (and even a bit below) 0V. (another technique uses a bootstrap capacitor but we won't go into that here, for more information locate AN-6076.pdf at https://www.fairchildsemi.com/application-notes/AN/AN-6076.pdf) Since we're already using a microcontroller for ADC sampling it becomes a fairly easy job to generate the required pulses. Here is a schematic using a similar technique to provide an LCD Bias Voltage when driving the LCD at lower voltages. The application is different but the idea is perfectly usable for our project. [[File:Charge-pump-based-negative-voltage-gen.png]] Commercial products are also available, like the CAT661 from OnSemi ( http://www.onsemi.com/pub_link/Collateral/CAT661-D.PDF ). We're just going to build our own using the PWM feature from the microcontroller. Here is the final schematic of the voltage-divider ADC sampling section including the FETs that turn everything on and off. [[File:0084-pfet-vdiv-6.png]] * The PWM ranges from 0 - 5V and has a duty cycle of 50%. It can be seen on the light-blue trace. * The negative voltage generated is about -3V and can be seen on the red trace. * The DUT voltage is plotted in the green trace * The ADC tap point is in dark-blue As you can see, all the way down to 0V do we have a useful voltage at the ADC sampling point. Turning the PWM off will bring the N-Ch fet Gate and the Source to 0V potential and seen from the Drain it will be high impedance. The pull-up resistor between Gate and Source on the P-Ch fet causes the Gate to float up to DUT voltage. This makes the P-Ch fet non-conducting. ===basic information through LCD module=== The handheld enclosure defines the maximum size of an information display. I have used several 2x16 character LCD modules and their setup is now very familiar to me. [[File:SD1602G2.jpg]] Without backlight the LCD will have a current draw of around 25mA. This doesn't seem much but running on batteries it could run them flat in about 120 hours (5 days) of constant use. Great for short-term projects where the device is running off USB or switched on for short periods at a time but not ideal for a measurement task that could last a week. There will be some pushbuttons underneath the LCD to navigate to some sort of setup menu. This menu should allow the user to select a sampling interval and maybe some other parameters (e.g. LCD sleep timeout, data export, wipe memory, etc..) ===able to set accurate sampling times (e.g. every n second(s), minute(s), hour(s), day(s))=== The ATtiny mcu can do sleep modes just fine but the waking process isn't accurate in it's timing. Initially I used a watchdog-timer to wake up the t84 at intervals, but it turns out these intervals are depending on internal clock speed and without a crystal they can be very inaccurate. I decided not to use an external crystal for the mcu as it still didn't allow me to accurately time wake-up events without a constantly proces of waking up the mcu, checking a counter, go back to sleep. After finding a low-power RTC (RealTime Clock) that can be controlled over I2C and draws only 5uA I knew I had something I could work with. The component I'm keen to use for this application is the Intersil ISL1218. [[File:Isl1218.jpg]] [[File:ISL1208.pdf]] The device can be set to a certain time (say, 1 hour from now) and send an interrupt to the mcu to wake it up to do a measurement. The RTC only needs an external crystal to work. It also caters for a backup battery (in the scenario where you can replace the 2x AA batteries in between measurements and have the datalogger perform the next measurement exactly on time as if nothing ever happened. I am not planning on using this feature but it is nice to know. ===store measurements in the device=== Voltage samples that are taken should be stored-and-retrieved using on-board non-volatile memory. EEPROM with an I2C interface is the preferred choice here. This means it doesn't take up any extra pins on the micro and it can just sit on I2C bus. Devices like the 24LC512 can store 64kBytes of data and are very low power (less than 1uA) when idle. [[File:24LC512.jpg]] At some point I may even wish to expand this feature to make use of a micro-SD card. These cards hold lots of storage and can be interfaced using SPI. ===extract measurement data through USB connection to a PC=== A micro-USB port on the device allows interfacing with a PC or laptop to retrieve measurement data. A third-party USB-to-UART module will be used to deal with the USB side to the PC and once connected it will spit out data at a rate of stock-standard 9600 baud 8-N-1. A simple serial terminal program (e.g. hyperterm, minicom) will receive the data once the micro receives an input character. ==Phase 2 selecting parts== To put it all together I had to make a few decisions that determines some minimum and maximum values as well as what features are going to be incorporated in the final design. ===POWER=== * battery power 2x AA NiMH or Alkaline batteries in series. This will provide between 2.0V and 3.0V. * battery charging Battery charging to be done through USB 5V power lines, assuming a maximum capacity of 500mA. I'm planning on using 2800mAh NiMH batteries, giving a maximum of 17% C. This is well below the maximum charge rate so we're very much on the safe side. In the final design I doubt that we will be even getting 500mA as we need to step down to about 3.5V as the maximum voltage across a single AA NiMH cell is about 1.7V. * running off USB power over battery power when USB is plugged in. A simple Power-OR'ing circuit using a single P-Channel FET is used to switch between the battery and USB power. When USB is plugged in it will automatically start the battery charging circuit. * internal power levels Most components can be used at voltages between 2.7V - 5.5V. I decided to run at 5V as it gives a workable Vgs threshold with FETs to turn on and off. To get to 5V off the batteries I will be using a very small DC-to-DC Boost Converter from Linear Technologies, the LTC3525. The battery charger circuit will run off the USB port 5V power lines as we want it to be completely separate to our datalogger circuit. It is essentially switched of when USB is not connected. NOTE: For versions of this or other projects where a small DC/DC boost converter is required I found the following other parts that deserve further investigation: [Power Management - Switching Regulators - Step Up (Boost) Regulator] * Texas Instruments: TPS61222(-EP), TLV61220, TPS61220, LM8850 * Semtech: SC4502, SC4505 * Maxim Integrated: MAX1722, MAX1723, MAX1724, MAX1834 Running directly off the batteries are: - LTC3525 5.0V boost converter The devices that will be running on the 5V produced by the boost converter are: - main ATtiny84 'brains' of the datalogger - ISL1218 Real Time Clock - Microchip 24LC512 EEPROM - Voltage sampling FETs - SD1602G2_2x16LCD module, ATtiny85, 74HC595 shift register Running of USB when attached: - UART to USB module - ATtiny85(?) NiMH battery charger and associated components ===LCD Module=== I have used the basic 2x16 LCD modules a few times in other projects and with an additional two components (an ATtiny85 and a 74HC595 serial shift register) I am able to drive it over I2C. The current draw is not super-low but it is a very versatile addition to the project and with a simple FET switching it on and off I can just put it to sleep or wake up whenever I need to. At this stage there is no need to graphically display a voltage curve, I rely on post-processing of the exported data using something like an electronic spreadsheet or so. Therefore the requirements for the LCD module is only to display text. I will provide two pushbuttons near the LCD to interact with an on-screen menu system to set certain variables. The size of the LCD module determines for a large part the 'smallness' of the design. The module I will be using is the SD1602G2. ===PC RS-232 interfacing=== These days very simple USB-to-UART converter boards are available on eBay. Instead of rolling my own I will be using a pre-made module to communicate over RS-232. [[File:CP2102.jpg]] CP2102-based TTL to UART over USB adapter When connected to USB these devices will present a COM-port over USB for which drivers are either already on the system or very easily obtained. Since a variety of other devices use these drivers the chances are you may already have the drivers on your system. To keep things reasonably robust I will limit the transfer speed to 9600 baud. This is more than adequate for exporting the EEPROM memory over RS-232 in a few seconds. Speed is not essential here. Resources: * CP2102 Drivers for Windows XP/Server 2003/Vista/7/8/8.1 (v6.7) [[File:CP210x VCP Windows.zip]] ===Sampling Speed and Interval=== ===Minimum Current Draw=== ==Phase 3 Design of Schematics and Circuit board== Final schematic of v1.0 of the datalogger design. The board dimensions (8.6cm x 6.3cm) are based on a plastic Remote Control enclosure, Jaycar PartNr: HB5610 Schematic v1.0 of the datalogger [[File:0084-v1.0-sch.jpg|none|thumb|200px]] Schematic v1.0 in PDF format: [[File:0084-v1.0-sch.pdf]] [[File:0084-v1.0-pcb top.jpg|none|thumb|200px]] Circuit Board top view Version 1.0 of the schematics and PCB done in Diptrace [[File:0084-voltage-datalogger-v1.0.zip]] ==Phase 4 Assembly of parts and testing == These are some first images of the very first unit fully assembled. [[File:0084-v1.0-final.jpg|none|thumb|200px]] [[File:0084-v1.0-inside top.jpg|none|thumb|200px]] [[File:0084-v1.0-topview.jpg|none|thumb|200px]] [[File:0084-v1.0-detail1.jpg|none|thumb|200px]] ==Phase 5 Datalogger Results== With the device fully assembled and tested the initial results are quite promising. [[File:0084-graph-1Ah-discharge-and-charge.png]] This graph shows the discharge and recharge of a 12V 1Ah SLA battery. The discharge is through a 15 Ohm resistor. Recharging was done by a relatively cheap battery charger. It shows that the battery lasted for about an hour and a half and the recharging took about an hour. Sample interval: once every 5 seconds. Each time interval is 1 hour. [[File:Powertech-MB-3526.jpg|none|thumb|100px]] [[File:0084-graph-car-starting.png]] This graph shows the voltage of my car's battery when starting it. You can see the individual compression cycles and the alternator taking over raising the voltage when the engine is running. Sample interval: about 20ms. Each time interval is 1 second. [[File:0084-graph-solar-charge-controller.png]] This graph shows my solar charge controller on a mostly overcast day. Interesting to see how the battery is kept topped up during the day. The solar panel goes into the shade fairly quickly so you're only seeing about 3 hours worth of power generation. [[File:Powertech MP3129 solar-charge-controller.jpg|none|thumb|200px]] So we know it uses around 35uA in sleep mode, but in practice, how long can I run the datalogger on two AA batteries for? I decided to set up one unit to do a self-monitoring test, sampling the datalogger's own power supply, the two AA batteries. I put in two (probably not fully charged) NiMH batteries and set the sampling interval at once every 60 seconds. The idea is to let it run for about three weeks and then see what the battery voltage goes down to. This is the result: [[File:0084-self-sampling-21days.png]] The starting voltage of the 2x AA NiMH batteries in series was around 2.73V and over time went down to around 2.61V. Several sources on the net mention that AA NiMH batteries are considered empty (without risking too much damage to the battery) at around 0.8V - 0.9V. Given the above data it seems we could be running the datalogger for many months! It confirms that in the three areas where I wasn't entirely sure how much power was being used there is no immediate need to further improve power consumption. * the resistor-voltage-divider network to measure the DUT's (device-under-test) voltage isn't significantly draining the DUT's battery. * the overall board's power consumption (using boost converters, microcontrollers and realtime clocks in sleep or idle mode) while running normally isn't significantly draining the datalogger's batteries. * the current configuration of waking up every second (interrupt from RTC) and comparing a sample ticks overflow counter isn't significantly draining the datalogger's batteries. The above graph doesn't even show the self-discharge of the NiMH batteries which is adding additional kindness to the results. My next test will be to run the datalogger for a few months. I will get 4 AA Alkaline batteries from the same pack (measure them to be sure they're the same voltage) and then put two in the datalogger and leave two next to it. That way I can confirm self-discharge as well. 8fbcd9892a9caacf2b7e0664e8ae508ad11ea9cd File:0137 schematic v1.0.png 6 784 3121 2019-06-16T02:49:07Z Admin 1 battery charge controller wikitext text/x-wiki == Summary == battery charge controller bae08cc3d18e72dd0c31b2a8faca4f5eaf33c01f File:0137 prototype.jpg 6 785 3128 2019-07-22T22:48:52Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0137 SLA-battery-charger pcb v1.0.jpg 6 786 3130 2019-07-23T22:37:44Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Syncthing-share 0 787 3165 3164 2019-11-01T22:23:40Z Admin 1 wikitext text/x-wiki This article shows how to set up a basic Syncthing share. Features: * Synchronise between Linux and Windows hosts * Uses Samba on Linux to cater for additional hosts that cannot run Syncthing * Operates as replicate-with-delete (files deleted from one share will automatically be deleted on the other share, just like a normal shared folder) So let's get started: ===Samba setup=== <pre> apt-get install samba syncthing </pre> Because samba runs on Linux it's easier to manage samba user accounts when these users also exist as local users on the Linux system. Furthermore, to apply permissions to all samba users in one go it is easier to create a linux group as well. <pre> groupadd samba-users </pre> * mkdir /home/samba * mkdir /home/samba/share * chgrp samba-users /home/samba/share * chmod 775 /home/samba/share * mkdir /home/samba/syncthing * chgrp samba-users /home/samba/syncthing * chmod 775 /home/samba/syncthing Add the user accounts you'll need for your samba server: <pre> adduser --gecos joe (+ enter new password) </pre> Add the users to the samba-users group: <pre> adduser joe samba-users </pre> Create the samba users: <pre> smbpasswd -a joe (+ enter same password as in linux) </pre> * edit /etc/samba/smb.conf at the end of the file, add these lines: <pre> [syncthing] comment = Samba Share path = /home/syncthing/samba browseable = yes read only = no guest ok = no valid users = @samba-users force user = syncthing force group = samba-users create mask = 0664 directory mask = 0775 </pre> You can now browse to \\<ip-address>\ with windows explorer where you will see the 'share' folder. Double-click on it and you will be presented with a login window, asking for credentials. Enter your user name and the password and you are now able to use the share for reading, writing and deleting files. ===Syncthing Setup=== By default, Syncthing will publish the host's unique Device ID to the global Syncthing servers on the Internet. As we'll see further down, this feature will make discovery and connection to hosts behind routers a breeze. First, let's set up the user process to run syncthing. * create syncthing system account and home directory <pre> useradd -r syncthing -m -d /home/syncthing usermod -g samba-users syncthing </pre> * enable syncthing to run as a service (unit file in /lib/systemd/system/) <pre> systemctl enable syncthing@syncthing.service systemctl start syncthing@syncthing.service </pre> Syncthing is now running and the web admin console can be reached from http://localhost:8384/. However if we want to remotely access this web console we need to configure a reverse proxy for it. ===Setting up a reverse proxy with Nginx=== * install nginx <pre> apt-get install nginx </pre> write an nginx website configuration file for syncthing <pre> vi /etc/nginx/conf.d/syncthing.conf === server { listen 80; server_name 10.0.0.23; root /var/www/html/syncthing/; access_log /var/log/nginx/syncthing.log; error_log /var/log/nginx/syncthing.error.log; location / { proxy_set_header Host localhost; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:8384; proxy_read_timeout 600s; proxy_send_timeout 600s; } } === </pre> Create the placeholder directory and restart nginx <pre> mkdir /var/www/html/syncthing systemctl reload nginx </pre> Now browse from another computer to the syncthing system with the address: http://<remoteip>/ ..and you should see the Syncthing admin console website. The site will probably alert you that no password has been set, so do this first. ===Creating Syncthing folders=== Now that syncthing is running and we can comfortably access the admin console from a remote machine we can now set up the various shares and configure how we want to use them. First a little Syncthing terminology: <b>Folders</b> -- These are local folders that are available to the machine that is running the Syncthing service (i.e. the machine that is hosting the Syncthing admin console website that we are currently viewing). These folders may or may not be shared with other machines that are running Syncthing. <b>This Device</b> -- Details and statistics about the machine that is hosting this admin console website and Syncthing services. <b>Remote Devices</b> -- Other Syncthing instances on other machines that we are synchronising shared folders to or from. Our goal is to have a Syncthing folder structure that will allow us to: * synchronise folders with other machines running syncthing * navigate to the Syncthing folders from Windows and Linux We have now created the foundation to make this happen, all we need to do now is to create the folders and configure how we wish to share them. ===Sharing folders=== Before any file or directory synchronisation happens, we need to introduce Syncthing hosts to each other. We do this by importing their unique Device ID. Again, before we can fully grasp the Syncthing philosophy we need to understand a few more concepts: <b>Introducer</b> -- Any devices configured on an introducer device will be added to this device as well. This is an option when manually importing or when automatically being presented with the import of another Syncthing host's Device ID. What this means is that any other remote hosts that the host we're about to add knows about, will also be added to the list of remote devices on this host. This is particularly useful if you're adding a host that already knows about a lot of other hosts that you will be seeking connections with. You will still need to request (or be given) access to shared folders, but the first step in finding out which hosts you need to contact is taken care of. <b>Send and Receive</b> -- <b>Send Only</b> -- <b>Receive Only</b> -- We must also set some linux file permissions, so that new files placed in the shared directories outside of samba will inherit the correct owner and permissions Once you have created a new Syncthing folder from the web gui, enter for every new parent folder: <pre> apt-get install acl chmod g+s <newfolder> setfacl -Rm g:samba-users:rwX <newfolder> setfacl -d -Rm g:samba-users:rwX <newfolder> </pre> All files and subdirectories will now inherit * 775 syncthing:samba-users permissions on each new directory * 664 <user>:samba-users permissions on each new file This is sufficient to make synching do its work with other peers without losing write access to files. When you add a new Remote Device by importing its Device ID you will not see anything happen until the remote device will accept the connection. Navigate to the Syncthing admin console of the host you added and log in. At the top of the page you should see a 'New Device' alert for the host that just imported the Device ID. Click on Add Device to accept the incoming connection. Here is how the process flows, step by step: <pre> Syntching Host A Syncthing Host B ---------------- ---------------- set up Syncthing set up Syncthing set up reverse proxy set up reverse proxy (if we don't have localhost www access) (if we don't have localhost www access) connect to the Syncthing admin console copy the Device ID string connect to the Syncthing admin console Click 'Add Remote Device' import Device ID from Host A (Hostname A will show as 'unused') connect to the Syncthing admin console Accept the incoming request from Host B Select locally shared folders you wish to allow Host B to have access to connect to the Syncthing admin console Accept the shared folder(s) from Host A Set a location on the local machine where the shared folder(s) can be written to. Optionally, include other remote hosts you wish to introduce to Host A's folder(s). This will trigger another import-accept run for each of these hosts. </pre> The initial communication between these hosts happens largely over the Internet. However, once these hosts exchange their ip addresses they will be able to communicate directly. Initially joining hosts could take a few minutes to process, so please be patient if you don't see any activity after requesting to join a new host or shared folder. There is no need to refresh the page as it will auto-reload to show any notifications. A useful indicator is to watch the Syncthing thumbnail icon in browser tab, as it will show an exclamation point if there is new activity on that page. 35225ed720e658bbde07b75f5408185c778724cd ATtiny84 WDT sleep 0 502 3166 2142 2019-11-04T10:55:59Z Admin 1 wikitext text/x-wiki The following code puts the ATtiny84 into sleep mode and it is woken up by an overflow of the Watchdog Timer (WDT). It should be compatible with the ATtiny85 series. Note that disabling the ADC functions (ADC and Comparator) are probably in different registers (e.g. ADCSRA or ADCSRB). <pre> #include <avr/sleep.h> #include <avr/wdt.h> #include <avr/interrupt.h> // these define cbi and sbi, for as far they are not known yet #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) void setup_watchdog(int ii) { // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms // 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec uint8_t bb; if (ii > 9 ) ii=9; bb=ii & 7; if (ii > 7) bb|= (1<<5); bb|= (1<<WDCE); MCUSR &= ~(1<<WDRF); // start timed sequence WDTCSR |= (1<<WDCE) | (1<<WDE); // set new watchdog timeout value WDTCSR = bb; WDTCSR |= _BV(WDIE); } // system wakes up when watchdog is timed out void system_sleep() { cbi(ADCSRA,ADEN); // switch Analog to Digitalconverter OFF setup_watchdog(9); // approximately 8 seconds sleep set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here sleep_enable(); sei(); // Enable the Interrupts so the wdt can wake us up sleep_mode(); // System sleeps here sleep_disable(); // System continues execution here when watchdog timed out sbi(ADCSRA,ADEN); // switch Analog to Digitalconverter ON } int main( void ) { while ( 1 ) { <your code goes here> <your code goes here> <your code goes here> system_sleep(); // start power down sequence } return 0; } // Watchdog Interrupt Service / is executed when watchdog timed out ISR(WDT_vect) { // nothing here } </pre> d2f51f81753de43c98ecb5ce920b3f5150ce95e3 ATtiny85 WDT sleep 0 788 3169 3168 2019-11-04T10:59:42Z Admin 1 wikitext text/x-wiki The following code puts the ATtiny85 into sleep mode and it is woken up by an overflow of the Watchdog Timer (WDT). It should be largely compatible with the ATtiny84 series, although you may get an error about WDTC(S)R. Note that disabling the ADC functions (ADC and Comparator) are probably in different registers (e.g. ADCSRA or ADCSRB). <pre> #include <avr/sleep.h> #include <avr/wdt.h> #include <avr/interrupt.h> // these define cbi and sbi, for as far they are not known yet #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) void setup_watchdog(int ii) { // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms // 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec uint8_t bb; if (ii > 9 ) ii=9; bb=ii & 7; if (ii > 7) bb|= (1<<5); bb|= (1<<WDCE); MCUSR &= ~(1<<WDRF); // start timed sequence WDTCR |= (1<<WDCE) | (1<<WDE); // set new watchdog timeout value WDTCR = bb; WDTCR |= _BV(WDIE); } // system wakes up when watchdog is timed out void system_sleep() { cbi(ADCSRA,ADEN); // switch Analog to Digitalconverter OFF setup_watchdog(9); // approximately 8 seconds sleep set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here sleep_enable(); sei(); // Enable the Interrupts so the wdt can wake us up sleep_mode(); // System sleeps here sleep_disable(); // System continues execution here when watchdog timed out sbi(ADCSRA,ADEN); // switch Analog to Digitalconverter ON } int main( void ) { while ( 1 ) { <your code goes here> <your code goes here> <your code goes here> system_sleep(); // start power down sequence } return 0; } // Watchdog Interrupt Service / is executed when watchdog timed out ISR(WDT_vect) { // nothing here } </pre> fe7e8759ae35c1b9e38b1c14a678633030a7578a File:Free-julian.jpeg 6 789 3170 2019-11-10T05:20:42Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 QCX-transceiver 0 790 3178 3177 2019-11-11T20:55:17Z Admin 1 wikitext text/x-wiki * product website: https://www.qrp-labs.com/qcx.html * forum: https://groups.io/g/QRPLabs Firmware upgrade process: Platform: Windows 10 Programmer: Sparkfun AVR Pocket Programmer 722f047ea8b6d257dd6df8e44cbd60795a5fb0dc File:Banner1.png 6 792 3182 2019-11-11T21:46:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Linux Bash 0 74 3200 3194 2019-11-12T04:43:01Z Admin 1 wikitext text/x-wiki useful Bash scripts: [[worklog]] [[dirsync]] [[dos2unix]] [[unix2dos]] [[wifi-startstop]] [[copy-rootfs]] [[dd-mount-tar]] [[miscellaneous-linux-info]] [[bombs]] a5bd258612ff22181646ff754e641ff8b23e3aee MediaWiki:Sitenotice 8 793 3202 3201 2019-11-12T04:44:08Z Admin 1 Replaced content with "-" wikitext text/x-wiki - 3bc15c8aae3e4124dd409035f32ea2fd6835efc9 Tips n Tricks 0 177 3204 3203 2019-11-17T04:19:07Z Admin 1 wikitext text/x-wiki Here's a compilation of various tips and tricks I came across over the years. Feel free to use and re-use as much as you like. ==set, clear and toggle macros== With AVR micros an often cryptic method is used to set, clear or toggle bits. Take for instance the following example to set a digital port to output and set it to a digital '1'. <pre> #DEFINE LEDPIN PB0 // define LED pin DDRB |= (1 << LEDPIN); // set to output PORTB |= (1 << LEDPIN); // write a digital '1' </pre> With these macros writing a digital '1' is now as simple as: <pre> // Some helper MACROS #define SET |= #define CLR &=~ #define TOG ^= #DEFINE LEDPIN PB0 // define LED pin DDRB SET (1 << LEDPIN); // set to output PORTB SET (1 << LEDPIN); // write a digital '1' </pre> ==bitwise operations== Similar to the above, here are some commands to set, clear or toggle a specific bit: * set (to 1) bit 2 (the third bit from the right) of variable a <pre> a |= (1<<2); </pre> * clear (to 0) bit 2 (the third bit from the right) of variable a <pre> a &= ~(1<<2); </pre> * toggle bit 2 (the third bit from the right) of variable a <pre> a ^= (1<<2); </pre> Below is a set of macros that works with ANSI C to do bit operations: <pre> #define bit_get(p,m) ((p) & (m)) #define bit_set(p,m) ((p) |= (m)) #define bit_clear(p,m) ((p) &= ~(m)) #define bit_flip(p,m) ((p) ^= (m)) #define bit_write(c,p,m) (c ? bit_set(p,m) : bit_clear(p,m)) #define BIT(x) (0x01 << (x)) #define LONGBIT(x) ((unsigned long)0x00000001 << (x)) </pre> ==byte type== In some programming environments the 'byte' type is readily available. It's usually just an unsigned char but if you don't want to search-and-replace every instance of byte with unsigned char in your code then here's a simple type definition that creates the byte type. <pre> typedef unsigned char byte; //create byte type </pre> ==rounding and decimals== Float values sometimes have too many decimals. Here are some generic rounding formulas: <pre> fl = (int) (fl + 0.5f)/1.0f; // round to 0 decimals fl = (int) (fl * 10 + 0.5f)/10.0f; // round to 1 decimals fl = (int) (fl * 100 + 0.5f)/100.0f; // round to 2 decimals </pre> ==AVR Sleep Mode== A recent project I built using an ATtiny85 micro was working fine and using about 4mA in idle mode. The circuit and its peripherals were powered through a 78L05 so I was wondering by how much I could lower the current draw by using the sleep function of the micro. Here's how I configured sleep mode to bring the current draw down to 2.4mA. This suggests that the voltage regulator still takes some energy to run at very low levels.. The technique below uses the expiry of the on-board watchdog timer to generate an interrupt which wakes the micro. Step 1 - import the sleep, watchdog and interrupt libraries Location: at the top of your code <pre> #include <avr/sleep.h> #include <avr/wdt.h> #include <avr/interrupt.h> </pre> Step 2 - add some helper functions Location: above the main() block <pre> /* NOTES: ATtiny85 ATtiny84 Watchdog Timer Register: WDTCR WDTCSR */ void wdtEnable(void) { wdt_reset(); cli(); MCUSR = 0x00; WDTCR |= _BV(WDCE) | _BV(WDE); WDTCR = _BV(WDIE) | _BV(WDP2); // 250ms sei(); } //disable the wdt void wdtDisable(void) { wdt_reset(); cli(); MCUSR = 0x00; WDTCR |= _BV(WDCE) | _BV(WDE); WDTCR = 0x00; sei(); } void system_sleep() { ACSR |= _BV(ACD); //disable the analog comparator ADCSRA &= ~_BV(ADEN); //disable ADC set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); wdtEnable(); //start the WDT //turn off the brown-out detector. //must have an ATtiny45 or ATtiny85 rev C or later for software to be able to disable the BOD. //current while sleeping will be <0.5uA if BOD is disabled, <25uA if not. cli(); mcucr1 = MCUCR | _BV(BODS) | _BV(BODSE); //turn off the brown-out detector mcucr2 = mcucr1 & ~_BV(BODSE); MCUCR = mcucr1; MCUCR = mcucr2; sei(); //ensure interrupts enabled so we can wake up again sleep_cpu(); //go to sleep //----zzzz----zzzz----zzzz----zzzz cli(); //wake up here, disable interrupts sleep_disable(); wdtDisable(); //don't need the watchdog while we're awake sei(); //enable interrupts again (but INT0 is disabled above) } // insert the ISR function outside the main() loop, all the way at the bottom of the code ISR(WDT_vect) {} //don't need to do anything here when the WDT wakes the MCU </pre> Step 3 - insert code to configure the sleep/watchdog registers once at startup Location: at the top of the main() block <pre> wdt_reset(); wdtDisable(); </pre> Step 4 - add your sleep command at the idle position(s) Location: normaly where you would have a delay at the end of a loop in main() <pre> system_sleep(); </pre> Step 5 - disable BOD in the command to flash the code to the micro or in software (not all models supported!) <pre> -U hfuse:w:0xDF:m </pre> ==custom functions and libraries== Here's a simple function that makes it easy to blink out a value. Handy if you only have one LED as a means for feedback. <pre> // With this code, a value like 302 is blinked as: // // <short> <short> <short> <long> <short> <short> void shortblink(uint8_t ledpin) { digitalWrite(ledpin,HIGH); _delay_ms(50); digitalWrite(ledpin,LOW); _delay_ms(500); } void longblink(uint8_t ledpin) { digitalWrite(ledpin,HIGH); _delay_ms(600); digitalWrite(ledpin,LOW); _delay_ms(500); } void numberblink(uint16_t value, uint8_t ledpin) { // blinks a number (from 0 - 65535) to a LED uint16_t divisor = 10000; uint8_t blinked=0; while (divisor >= 10) { if (value > divisor) { // do some blinking while (value >= divisor) { shortblink(ledpin); blinked=1; if (value >= divisor) value = value - divisor; } } else { // value is less than divisor, probably encountered a (middle) zero // blink long if we've blinked before if (blinked == 1) longblink(ledpin); } _delay_ms(1000); divisor = divisor / 10; } if (value == 0) { // always long blink last zero longblink(ledpin); } else { while (0 < value) { // blink ones shortblink(ledpin); value=value-1; } } } </pre> c09710ada7c5b7200882639701450696b915ede9 ATtiny85 ADC 0 175 3205 2744 2019-11-17T04:34:35Z Admin 1 wikitext text/x-wiki This page provides a copy-and-paste working example of using the ADC (Analog-to-Digital Converter) in an Atmel ATtiny85 8-bit microcontroller. With minimal adjustments this code should work on microcontrollers from the same family (such as the ATtiny25, ATtiny45, ATtiny24, ATtiny44 and ATiny84). [[File:Attiny85 pinout.png]] [[File:Atmel-logo1.png]] The main thing you will need to find out for your own microcontroller is the clock speed, as it determines the ADC sample rate. The ADC sample rate for this mcu needs to be between 50 - 200kHz and can be adjusted to fall within this range by means of setting the Prescaler bits in the ADCSRA register. Example #1 code: * assumes a clock speed of 8MHz on an ATtiny85 * uses 8-bit resolution (values from 0-255) * uses ADC2 on pin PB4 * uses VCC as the reference voltage <pre> void initADC() { /* this function initialises the ADC ADC Prescaler Notes: -------------------- ADC Prescaler needs to be set so that the ADC input frequency is between 50 - 200kHz. For more information, see table 17.5 "ADC Prescaler Selections" in chapter 17.13.2 "ADCSRA – ADC Control and Status Register A" (pages 140 and 141 on the complete ATtiny25/45/85 datasheet, Rev. 2586M–AVR–07/10) Valid prescaler values for various clock speeds Clock Available prescaler values --------------------------------------- 1 MHz 8 (125kHz), 16 (62.5kHz) 4 MHz 32 (125kHz), 64 (62.5kHz) 8 MHz 64 (125kHz), 128 (62.5kHz) 16 MHz 128 (125kHz) Below example set prescaler to 128 for mcu running at 8MHz (check the datasheet for the proper bit values to set the prescaler) */ // 8-bit resolution // set ADLAR to 1 to enable the Left-shift result (only bits ADC9..ADC2 are available) // then, only reading ADCH is sufficient for 8-bit results (256 values) ADMUX = (1 << ADLAR) | // left shift result (0 << REFS1) | // Sets ref. voltage to VCC, bit 1 (0 << REFS0) | // Sets ref. voltage to VCC, bit 0 (0 << MUX3) | // use ADC2 for input (PB4), MUX bit 3 (0 << MUX2) | // use ADC2 for input (PB4), MUX bit 2 (1 << MUX1) | // use ADC2 for input (PB4), MUX bit 1 (0 << MUX0); // use ADC2 for input (PB4), MUX bit 0 ADCSRA = (1 << ADEN) | // Enable ADC (1 << ADPS2) | // set prescaler to 64, bit 2 (1 << ADPS1) | // set prescaler to 64, bit 1 (0 << ADPS0); // set prescaler to 64, bit 0 } int main(void) { initADC(); while(1) { ADCSRA |= (1 << ADSC); // start ADC measurement while (ADCSRA & (1 << ADSC) ); // wait till conversion complete if (ADCH > 128) { // ADC input voltage is more than half of VCC } else { // ADC input voltage is less than half of VCC } } return 0; } </pre> ===Reference Voltage=== The reference voltage determines the upper limit of the ADC range. For example, if the ATtiny85 is powered with 5V and the ADC is configured to use Vcc as the reference voltage then the ADC is able to convert an (analogue) voltage between 0V and 5V. Within the whole range between 0V to 5V it is able to sample any voltage and convert that to an 8-bit (256 values) or 10-bit (1024 values) integer number. So if you were to provide 2.0V on pin PB4 you would get a value of 102 in 8-bit sampling (or 410 in 10-bit sampling). According to the datasheet you can power your ATtiny85 from 1.8V to 5.5V (depending on frequency and model used). Specifying VCC as the reference voltage will then lead to a varying conversion value. For instance, powering your micro with 3.3V and putting the same 2.0V on PB4 will now result in a value of 155 in 8-bit sampling (or 621 in 10-bit sampling). There is a simple provision in the ATtiny85 to make the varying VCC voltage (especially when powering directly off batteries) not affect the ADC readings. The chip provides a VCC-independent fixed 1.1V reference voltage. Check the REFS0 and REFS1 registers in the datasheet on how to enable these. You won't be able to measure our example 2.0V voltage, but a simple voltage divider will take care of that. Alternatively a special-purpose reference voltage chip or linear voltage regulator can be added to your design to make sure the reference voltage doesn't vary too much. ===Sample Resolution=== 8-bit or 10-bit? The sample resolution determines the final number that the ADC will store the result to. To refresh your memory, 8-bits are used to hold values from 0 to 255 and 10-bits are required to hold values from 0 to 1023. Since the ATTiny85 is an 8-bit micro it needs two registers to hold the final ADC value if you're using 10-bits sampling. In that case you will need to read the 'upper' and the 'lower' bytes, add them and treat them as an 16-bit integer in order not to lose any information. Whether you need 8-bit or 10-bit sampling depends on your application. You will have a courser granularity when sampling at 8-bits but it's easier to process and code and if your requirements do not demand very fine detection of ADC input voltages it may be all you need. One thing to keep in mind is the voltage range per sample value. Minimum detectable voltage difference between steps (0-5V): at 8-bit sampling: 19.53mV at 10-bit sampling: 4.88mV Example #2 code: * assumes a clock speed of 1MHz on an ATtiny85 * uses 10-bit resolution (values from 0-1024) * uses ADC2 on pin PB4 (pin 3) * uses Vcc as the reference voltage <pre> void initADC() { /* this function initialises the ADC For more information, see table 17.5 "ADC Prescaler Selections" in chapter 17.13.2 "ADCSRA – ADC Control and Status Register A" (pages 140 and 141 on the complete ATtiny25/45/85 datasheet, Rev. 2586M–AVR–07/10) // 10-bit resolution // set ADLAR to 0 to disable left-shifting the result (bits ADC9 + ADC8 are in ADC[H/L] and // bits ADC7..ADC0 are in ADC[H/L]) // use uint16_t variable to read ADC (intead of ADCH or ADCL) */ ADMUX = (0 << ADLAR) | // do not left shift result (for 10-bit values) (0 << REFS2) | // Sets ref. voltage to Vcc, bit 2 (0 << REFS1) | // Sets ref. voltage to Vcc, bit 1 (0 << REFS0) | // Sets ref. voltage to Vcc, bit 0 (0 << MUX3) | // use ADC2 for input (PB4), MUX bit 3 (0 << MUX2) | // use ADC2 for input (PB4), MUX bit 2 (1 << MUX1) | // use ADC2 for input (PB4), MUX bit 1 (0 << MUX0); // use ADC2 for input (PB4), MUX bit 0 ADCSRA = (1 << ADEN) | // Enable ADC (1 << ADPS2) | // set prescaler to 16, bit 2 (0 << ADPS1) | // set prescaler to 16, bit 1 (0 << ADPS0); // set prescaler to 16, bit 0 } int main(void) { initADC(); uint8_t adc_lobyte; // to hold the low byte of the ADC register (ADCL) uint16_t raw_adc; while(1) { ADCSRA |= (1 << ADSC); // start ADC measurement while (ADCSRA & (1 << ADSC) ); // wait till conversion complete // for 10-bit resolution: adc_lobyte = ADCL; // get the sample value from ADCL raw_adc = ADCH<<8 | adc_lobyte; // add lobyte and hibyte if (raw_adc > 512) { // ADC input voltage is more than half of the internal 1.1V reference voltage } else { // ADC input voltage is less than half of the internal 1.1V reference voltage } } return 0; } </pre> ===Accuracy and Averaging=== If possible, take multiple samples and average them out. Assuming that the ADC always provides a reliable value at the first attempt may lead to undesired consequences. For one of my voltage-datalogger applications the main ADC sampling loop consisted of: * sample 5 readings * sort these from high to low * discard the top and bottom * average the remaining three Alternatively, the following function can be used to sample and average many readings into only a few lines of code: <pre> // take 100x 8-bit samples and calculate a rolling average of the last 15 samples float voltage_fl; // real battery voltage (0-5V) with decimals float adc_step=0.01953; // (0-5V over 256 values) int sample_loop; for (sample_loop=100; sample_loop > 0 ; sample_loop --) { ADCSRA |= (1 << ADSC); // start ADC measurement while (ADCSRA & (1 << ADSC) ); // wait till conversion complete voltage_fl = voltage_fl + (((ADCH * adc_step) - voltage_fl) / 15); // integrated last 15-sample rolling average } </pre> Does 100 samples sound like a bit much? Have a look here for what the averaging function does when it is given random values between 1.9 and 2.1. [[File:Random-adc-values.png|thumb|none|250px|A close-up of some of the random values]] And this is what happens after running the averaging function 100 times. [[File:Last-15-rolling-avg.png|thumb|none|250px|Last 15 values are rolling averaged]] As you can see it takes a while to settle. This is mainly caused by the number of rolling average samples (here 15) and the gradual 'building up' of the values when starting from 0. Ideally the very first ADC reading would not be zero, but to be on the safe side we have taken this precaution. Resources: * [[File:Icon-pdf.gif]] [[File:Attiny85-summary.pdf]] ATtiny85 Summary Datasheet (30 pages, 692kB) * [[File:Icon-pdf.gif]] [[File:ATtiny85.pdf]] ATtiny85 Complete Datasheet (236 pages, 4.59MB) * http://www.microchip.com/wwwproducts/en/ATtiny85 Official ATtiny85 product page See also: * [[C and C++]] * [[ATtiny84_ADC]] * [[ATtiny85_PWM]] 76f5942a3d7a23e48afbcc16e31df6f24cdcf39d File:Kiwisdr-waterfall.jpg 6 794 3207 2019-12-02T00:18:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BSH203.pdf 6 796 3232 2019-12-13T08:08:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NDS352AP-D.PDF 6 797 3234 2019-12-13T08:10:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BSS84.pdf 6 798 3236 2019-12-13T08:12:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:SSM3J332R.pdf 6 799 3247 2019-12-14T00:35:15Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BSS123-D.PDF 6 800 3256 2019-12-14T01:22:46Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BSH108.pdf 6 801 3258 2019-12-14T01:28:41Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:2N7002.pdf 6 802 3262 2019-12-14T01:41:19Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:BSS138-D.PDF 6 803 3264 2019-12-14T01:47:37Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:AO3400.pdf 6 804 3268 2019-12-14T02:30:06Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Si2303BDS.pdf 6 805 3270 2019-12-14T02:39:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Si2302DS.pdf 6 806 3272 2019-12-14T02:46:25Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NDS331N-D.PDF 6 807 3276 2019-12-14T02:51:20Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:5LN01C.PDF 6 808 3278 2019-12-14T03:01:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NTR4003N-D.PDF 6 809 3280 2019-12-14T03:07:55Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:SOT-23 NFET pinout.png 6 810 3284 2019-12-14T03:15:31Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:SOT-23 PFET pinout.png 6 811 3287 2019-12-14T03:25:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Docs and Howto's 0 51 3296 2891 2019-12-17T02:52:10Z Admin 1 wikitext text/x-wiki Howto's, information, guides, and other information that I wanted to have online for easy access. Docs: Something on [[Cryptography]] Examples for [[Gnuplot]] [[Blaupunkt520_repair]] My Howto's: [[Transfer_contacts_between_iphone_and_android]] [[failsafe on turnigy evolution]] 08b546c915ca3c0a413a1060c8cf5251b6d258e0 File:Blaupunkt520 repair1.jpg 6 813 3299 2019-12-17T03:43:59Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blaupunkt520 repair0.jpg 6 814 3303 2019-12-17T03:53:23Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Astra-TS-CD.jpg 6 815 3305 2019-12-17T03:58:59Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blaupunkt520 repair2.jpg 6 816 3308 2019-12-17T04:19:56Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blaupunkt520 repair3.jpg 6 817 3310 2019-12-17T04:22:18Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blaupunkt520 repair4.jpg 6 818 3311 2019-12-17T04:23:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blaupunkt520 repair5.jpg 6 819 3315 2019-12-17T04:26:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Blaupunkt520 repair6.jpg 6 820 3316 2019-12-17T04:28:09Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Blaupunkt520 repair 0 812 3322 3321 2019-12-17T04:51:19Z Admin 1 wikitext text/x-wiki A little success story of a car radio repair gone right. A few weeks ago my girlfriend's car radio stopped working. The car is a Holden Astra model ST from 2001 released for the Australian market. On the (UK-based) 'Astra Owners Website' they also refer to this model as either a Vauxhall Astra Fourth Generation (or Mk 4) or Opel Astra G. [[File:Astra-TS-CD.jpg]] Funnily enough, there are even three pages on Wikipedia, each for a particular market: * https://en.wikipedia.org/wiki/Holden_Astra * https://en.wikipedia.org/wiki/Vauxhall_Astra * https://en.wikipedia.org/wiki/Opel_Astra The car radio is a Blaupunkt 520. It's a smart-ish radio in that it communicates with an external display higher up in the centre console and shows things like radio station, volume, CD track etc.. [[File:Blaupunkt520 repair0.jpg]] So at one point a few weeks ago the output volume suddenly started dropping. I was listening to some music on CD and the volume coming out of the speakers dropped to almost nothing over a period of maybe 10 seconds. I tried compensating by turning the volume up but it really was getting quieter and quieter. I switched on the FM radio but it was also very very quiet; almost no output volume. I switched off the radio and drove home. This couldn't be a fuse or so because the radio and all the controls still worked; it was just very very quiet. Since the symptoms were the same when either listening to CD or radio I assumed that the fault was in the final output power amplifier. Since I didn't really wanted to open up the radio and swap out these chips I thought it would be simpler to just look around for a second-hand Blaupunkt 520 radio. Someone on eBay had one on sale for $20 ex shipping. Unfortunately he didn't have the security code. The security code is important because it locks down the radio if the battery power is removed. I knew our radio's code but that didn't help for this other radio as a unique code is programmed inside each radio. Change the radio and you'll need a new code. There are usually ways to recover (or maybe reset) the code through the official car dealership, e.g. in case you've lost your code or bought a car without knowing the code from the previous owner. I decided to take the risk and buy the radio on eBay in the hopes of being able to reset it through a local Holden dealer. My girlfriend is the first owner of her Astra and has all the official paperwork to prove so. I thought it would be a (perhaps somewhat costly) breeze to recover the replacement radio's code. The radio from eBay arrived shortly after the purchase and we began inquiring with several Holden dealers in the area to get an idea of what it would cost to have the radio code recovered. I must say this was a very unsatisfying experience. The feedback from the local dealers can be summarised as a mix of hostility, unhelpfulness, rudeness and sheer incompetence. Some seemed to insinuate that we had a stolen radio, others flat-out refused to help and some gave us the idea that our problem wasn't worth their time even though we were well prepared to pay for the recovery service. The next step was to look for an online radio-code recovery service. Yes they exist, but we weren't successful with them either. Websites that offer these services ask for a couple of details and then (if all goes well) instantly produce a code that you can use straight away to unlock your radio. The website I found asked for the Blaupunkt 520's serial number and part number. Well, the serial number was printed on a sticker, but the part number was missing. I looked everywhere, even inside the radio, but was not able to find the part number. I figured that probably any website that offers these instant-code-generator services operates in the same way and not having a critical piece of information will probably mean that any other code generating website would also not be able to help. After calling another Holden dealer I finally got some good information. In order to recover the radio code they would also need the VIN (chassis number) of the car that the radio originally came out of. I asked the eBay seller but he said he was unable to recover this information. Hmm... what to do. Since I already had the radio open at this stage I noticed the two final amplifier ICs. (Grey and black ICs that are backed up against the two copper heat sinks) [[File:Blaupunkt520 repair1.jpg]] Standing up vertically, on the right side is the AM and FM radio module, but apart from that there was no easy swapping of modules that could help me repair the original radio with the one I just bought. The Final Power Amplifier is the component in the radio that amplifies the (relatively weak) audio signals from the AM and FM radio or CD player and drives the loudspeakers. It was my guess to think that the fault was in these chips as the radio controls all worked; there just wasn't any audio out. Investigating the part numbers on these chips it was clear that these were two identical chips, the TDA7375A. I recognised the 'ST' manufacturer logo and had a look on the ST MicroElectronics website to find the component. They now sell the TDA7375V and TDA7375AV, but not the plain 'A' series anymore. The datasheet for the 'AV' product did reveal that it is indeed a 'class AB car radio amplifier able to work either in dual bridge or quad single ended configuration.' (see here for product website on the ST website: https://www.st.com/content/st_com/en/products/automotive-infotainment-and-telematics/automotive-audio-power-amplifiers/automotive-class-ab-audio-power-amplifiers/tda7375av.html) They are able to drive about 35W into a speaker and since there are two I think that it's 35W for the left and 35W for the right audio channel. A quick search on Mouser, a big online electronics parts supplier, showed that these chips retail for about $8 a piece. At least I now knew that these were indeed the chips responsible for the final output Power Amplifiers and that the 'easiest' fix was to swap them over from the eBay radio (assuming that the PA chips in the Ebay radio were still good). I could have bought two new chips from Mouser, but I wasn't 100 per cent sure that the problem was indeed these chips. The most cost-effective way was just to salvage the chips from the eBay radio. This also meant that I didn't have to chase up radio codes as all I was going to do was replace the amplifier chips. Let the (un)soldering begin.. Using a 40W soldering iron, a tin-sucker and a lot of patience I am able to take out the tin surrounding the pins one by one.. [[File:Blaupunkt520 repair2.jpg]] ..until all the pins are freed and I'm able to wiggle out the first chip. (bottom view) [[File:Blaupunkt520 repair3.jpg]] (top view) [[File:Blaupunkt520 repair4.jpg]] Rinse and repeat until both chips from both radios are unsoldered. [[File:Blaupunkt520 repair5.jpg]] Finally! Both chips are unsoldered and ready to be swapped. [[File:Blaupunkt520 repair6.jpg]] The holes in the circuit board were clean enough for the replacement chips and after re-soldering them in place I began assembling the radio back together again. I slotted the radio back into the car dashboard and the moment of truth came.. As expected, the clock-display in the top console asked for 'RADIO CODE - - - -'. I entered the radio code and it was accepted. So far so good. I then turned on the radio to an FM station and... IT PLAYED SOUNDS THROUGH THE SPEAKERS!! YAAAY!!! This is a very good outcome. Apart from the frustration of talking to Holden dealers and the realisation that Blaupunkt doesn't make it easy for their radios to be re-used (even in identical cars!), it took me a few hours to do the soldering. ff5d71c85f36fbe8aaef68d55847e390160a678a Surface Mount FETs compared 0 795 3325 3324 2019-12-26T21:52:37Z Admin 1 wikitext text/x-wiki One particular electronics component that I often found difficult to pick for my projects is the venerable MOSFET. The FET (Field Effect Transistor) is part of the Transistor family of semiconductors. There are many types of transistors, but they basically fall in one of these three broad categories: * Current-driven: BJT (Bipolar Junction Transistor) * Voltage-driven: FET (JFET and MOSFET) * Other (e.g. phototransistors) In this overview I focus mostly on Enhancement-mode MOSFETs and present a selection guide with examples. BJTs and FETs can be used for either switching or amplification, but generally one type performs better than the other. Fastest switching speeds can still be obtained by BJTs but due to the low power consumption FETs are often the better choice. Consider: * BJTs require a constant current flow through the base in order for the transistor to open. This base-driven current flow can easily exceed the current rating of microcontroller ports and additional drivers (BJTs or FETs) are often required to enable higher drive currents. BJTs however outperform FETs in terms of amplification factor. Although BJTs can be used for switching purposes, they are not the most obvious choice when we need to save overall power consumption. * FETs are voltage driven and can usually be connected directly to microcontroller ports. There is the factor of inrush-current if a FET has a high capacitance, but a simple series current-limiting resistor is sufficient to deal with that. FETs may also need to be selected to be compatible with the logic-level (TTL) voltages and may therefore also require additional drivers to enable higher (or lower) drive voltages. They are however a better choice than BJTs when it comes to low-power switching. Lastly, before we get to our overview, there is one more distinction I want to address: JFET vs MOSFET. The JFET (Junction-FET) has certain benefits over the MOSFET. JFETs have a simpler production process and are therefore usually cheaper. JFETs also have higher gate input capacitance which makes them more robust to ESD (Electro-Static Discharge) compared to MOSFETs. However, since MOSFETs are the FET of choice for big players like Intel their prices have come down and characteristics have improved. It seems that, like BJTs, JFETs are slowly but steadily giving way to MOSFETs for many applications except where their niche is unchallenged. (This page is a work in progress) ===Assumptions=== (the dangerous part of this page) Typically, if we're using N-Channel FETs driven directly from a microcontroller, the drive voltage is probably going to be 1.8V, 3.3V or 5.0V. It is therefore best to select FETs that turn (almost) fully-on with the Vcc that we're powering the microcontroller with. With FETs, I'm primarily interested in the ones that can switch on with mcu Vcc and offer a low RdsOn. The FET package for my projects ideally should be SOT-23. These are the ones that I can still comfortably solder yet offer a maximum power rating (heat dissipation) of about 0.4W (that's about 80mA @ 5V, or 120mA @ 3.3V). In the datasheets, the 'Typical Output Characteristics' (Id vs Vds) shows the voltage drop (Vds axis) for a given Drain current. Multiply those and you'll get a feel for the heat dissipation in Watts. ===Vgsth=== The threshold value when the FET begins conducting. A bigger voltage difference between Gate and Source than this value will open the FET more. This value is usually shown in the Id-vs-Vgs 'Transfer Characteristics' graph. At the point where the curve (going up) becomes a near-linear line the FET is fully open. We generally seek the lowest voltage where the FET is about to become linear. The Transfer Characteristics graph however is not the best indicator what that 'fully-open' Vgs voltage is. The Transfer Characteristics graph often shows multiple curves showing how temperature affects the beginning of conduction. Furthermore, Vgsth is often the point at which only a very small amount of current (e.g. 250uA) begins to flow, in many real-world cases this is not the current we're interested in. Lastly, the Vgsth value is often measured at a nominal Vds voltage of about 10V, which in many low-power microcontroller circuits isn't always available. The better curve to show the FET-fully-on Voltage is the 'Output' or 'Typical On-State Resistance' curve. This curve often shows the Vgs voltages that are the tipping point between ever-increasing Rds (not enough Vgs) and Rds remaining nearly constant (sufficient Vgs to turn the FET on). ===Vgs_on=== This is my own parameter that shows when the FET should be fully on. This means that the RdsOn value remains largely constant and the FET is in (or close to) linear (aka 'saturation') mode. The main graph in the datasheet that I use to obtain this value is the 'Drain-Source On-Resistance' curve (showing RdsOn vs Id). ===Vds=== The maximum voltage the FET can safely handle between the Drain and Source. For our purposes we'll mainly look at whether the FET already turns on at mcu Vcc voltages. ===Id=== The maximum continuous current we can run through the Drain of the FET. This value is dependent on the maximum Drain-Source voltage. FETs running at a higher voltage need to lower their maximum current. The value for this characteristic is usually shown in the Id-vs-Vds(V) graph, aka the 'Safe operating area' graph. I'm usually only interested in the maximum continuous current rating without going over the maximum power rating of the FET (or SOT-23 package, i.e. around 0.4W). In practice, I look for FETs that can handle either up to 50mA or 100mA @ 5V or 3.3V. ===RdsOn=== The resistance between Drain and Source when the FET is fully open. The value for this characteristic is usually shown in the 'Output' or 'Typical On-State Resistance' curve (Rdson-vs-Id(mA)). As Vgs goes more and more above Vgsth (before the FET is fully-on) the lower the On-Resistance between Drain and Source (Rdson). When the FET is fully-on Rds remains fairly constant. If the FET is not yet fully-on, Rds is lower with low currents. ===N-Channel, Enhancement-mode, Logic-Level MOSFETs SOT-23=== Fortunately, for all these N-Channel FETs the pinout is the same: [[File:SOT-23 NFET pinout.png]] {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Device</b> |style="background-color:#f2f2f2;"|<b>Vgsth</b> |style="background-color:#f2f2f2;"|<b>Vgs_on</b> |style="background-color:#f2f2f2;"|<b>Vds</b> |style="background-color:#f2f2f2;"|<b>Id</b> |style="background-color:#f2f2f2;"|<b>RdsOn</b> |style="background-color:#f2f2f2;"|<b>Comments</b> |style="background-color:#f2f2f2;"|<b>Datasheet</b> |- |Si2302DS |0.65V |2.0V |20V |? |0.70R to 1.1R |could work with 1.8V, low cost |[[File:Si2302DS.pdf]] |- |NDS331N |0.7V |2.0V |20V |160mA @ 3.3Vds, 140mA @ 5Vds |0.7R to 1.5R |could work with 1.8V |[[File:NDS331N-D.PDF]] |- |5LN01C |1.0V |2.0V |50V | |6R to 10R |high RdsOn |[[File:5LN01C.PDF]] |- |AO3400 |1.05V |2.5V |30V |120mA @ 3V, 105mA @ 5V |0.18R to 0.54R |don't use below 2.5Vds |[[File:AO3400.pdf]] |- |BSS138 |1.3V |2.5V |50V |100mA @ 3.3V, 70mA @ 5V |1.2R to 2.3R |don't use below 3.3V |[[File:BSS138-D.PDF]] |- |BSS123 |1.7V |2.5V |100V |100mA @ 3.3Vds, 70mA @ 5Vds |0.8R to 1.2R | good for 3.3V and up |[[File:BSS123-D.PDF]] |- |BSH108 |1.5V |2.6V |30V |75mA @ 3V, 45mA @5V |0.10R to 0.18R | good for 3V and up |[[File:BSH108.pdf]] |- |NTR4003 |1.1V |2.8V |30V | |0.9R to 1.2R | |[[File:NTR4003N-D.PDF]] |- |2N7002 |2.5V |5V |60V |? |3.2R @ 5V |High RdsOn, don't use below 5Vds |[[File:2N7002.pdf]] |} ===P-Channel, Enhancement-mode Logic-Level MOSFETs SOT-23=== Fortunately, for all these P-Channel FETs the pinout is the same: [[File:SOT-23 PFET pinout.png]] {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Device</b> |style="background-color:#f2f2f2;"|<b>Vgsth</b> |style="background-color:#f2f2f2;"|<b>Vgs_on</b> |style="background-color:#f2f2f2;"|<b>Vds</b> |style="background-color:#f2f2f2;"|<b>Id</b> |style="background-color:#f2f2f2;"|<b>RdsOn</b> |style="background-color:#f2f2f2;"|<b>Comments</b> |style="background-color:#f2f2f2;"|<b>Datasheet</b> |- |BSH203 | -1.1V | -2.5V | -30V | -80mA @ 5Vds, -105mA @ 3.3Vds | 0.8R to 1.2R | could work with 1.8Vgs |[[File:BSH203.pdf]] |- |SSM3J332R | -1.2V @ -3Vds | -2.5V | -30V | -110 mA @ 5Vds, -200mA @ 3.3Vds | 0.05R @ 3.3V | could work with 1.8Vgs |[[File:SSM3J332R.pdf]] |- |NDS352AP | -2.5V @ -10Vds | -3.5V | -30V | -100mA @ 5Vds, -105mA @ 3.3Vds | 0.9R to 1.4R | don't use below 3Vgs, low cost |[[File:NDS352AP-D.PDF]] |- |BSS84 | -1.9V @ -10Vds | -4.0V | -50V | -140mA @ -5Vds | 8R to 12R | High RdsOn, don't use below 4Vgs |[[File:BSS84.pdf]] |- |Si2303BDS | -2.0V | -4.5V | -30V | 90mA @ 5Vds | 0.18R to 0.5R | don't use below 5Vgs |[[File:Si2303BDS.pdf]] |} Note: if you're after TO-92 package FETs I can mention: * P-Channel: BS250P, VP0109N3-G, ZVP2106ASTZ * N-Channel: BS107A, BS170, 2N7000 d8eda21133af48faeb4716a94c32630ab8835fba File:Nanovna-upgrade 01 lets-begin.jpg 6 822 3329 2020-03-14T05:36:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 02 28gauge-wire-underneath.jpg 6 823 3330 2020-03-14T05:42:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 03 one-side-loose.jpg 6 824 3331 2020-03-14T05:43:13Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 04 all-sides-loose.jpg 6 825 3332 2020-03-14T05:44:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 05 clean-pads.jpg 6 826 3333 2020-03-14T05:44:50Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 06 new-chips.jpg 6 827 3334 2020-03-14T05:45:56Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 07 position-chip.jpg 6 828 3335 2020-03-14T05:46:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 08 all-soldered-up.jpg 6 829 3336 2020-03-14T05:47:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 10 STLink-programmer.jpg 6 831 3338 2020-03-14T05:49:38Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 11 programming-new-firmware jolly-good.jpg 6 832 3339 2020-03-14T05:50:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 12 it-werks.jpg 6 833 3340 2020-03-14T05:51:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 13 firmware-info.jpg 6 834 3357 3341 2020-03-14T07:17:34Z Admin 1 Admin uploaded a new version of [[File:Nanovna-upgrade 13 firmware-info.jpg]] wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Nanovna-upgrade 09 STLink-connections-to-pcb.jpg 6 830 3365 3337 2020-03-14T08:16:55Z Admin 1 Admin uploaded a new version of [[File:Nanovna-upgrade 09 STLink-connections-to-pcb.jpg]] wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Nanovna-upgrade 0 821 3367 3366 2020-03-15T08:38:23Z Admin 1 wikitext text/x-wiki In 2019 I bought a handy little tool called a Vector Network Analyser. These devices usually cost thousands of $$ but recently with the aid of very flexible, stable and affordable frequency generators from Silicon Labs, such as the Si5351A, a whole new range of rf products has been made available at very little cost. (What is a Network analyzer: https://en.wikipedia.org/wiki/Network_analyzer_(electrical) ) At around $800 The VNWA3 from DG8SAQ (https://www.sdr-kits.net/introducing-DG8SAQ-VNWA3) is already a cost-effective unit. It uses two Analog Devices AD9859 signal generators (https://www.analog.com/en/products/ad9859.html) and three of SA612 double-balanced mixers and offers a detection bandwidth from 1kHz - 1.3GHz. It is a unit that requires a USB connection to a computer which in turn needs some software to show the results and graphs. This design was further developed by edy555 (aka 'ttrf') in Japan and his version, the original NanoVNA, offered an all-in-one solution using a Silicon Labs Si5351A as the signal generator (https://www.silabs.com/timing/clock-generators/cmos/device.si5351a-b-gt) including a 2.8-inch colour touch-screen. Gen Hu further developed this hardware design and it became known as the NanoVNA-H (but they are compatible firmware-wise). The NanoVNA I bought happened to be a Chinese clone of the NanoVNA-H. Everything seemed to work okay and I was able to use it to test various filters and antennas. After subscribing and following the NanoVNA forum for a few weeks I noticed that people were discussing upgrades to their NanoVNA by way of installing newer firmware. I got intrigued by this and wanted to see if I could also upgrade my NanoVNA with one of the latest firmwares. There are several authors that release different kinds of NanoVNA firmware, but in essence they should all run on the same hardware. Exceptions are the NanoVNA-H4 (STM32F303) and the NanoVNA-F (ST32F303 + bigger screen). The unit I purchased has the standard size screen with an STM32F072 chip so my options for new firmware are: * edy555 (https://github.com/ttrftech/NanoVNA/releases) * Gen Hu (https://github.com/hugen79/NanoVNA-H/releases) * QRP RX (https://github.com/qrp73/NanoVNA-Q/releases) (See also: https://groups.io/g/nanovna-users/wiki/home#Hardware-versions) I opted for the edy555 and visited his github page and downloaded the latest version, a binary file of about 87kByte in size. Flashing the firmware resulted in an error because the chip that is used in my NanoVNA (STM32F072C8T6) only holds 64kByte of program (flash) memory. This means I cannot upload a 87kByte piece of code into a 64kByte chunk of memory. A little bit of research on the NanoVNA forum and the ST MicroElectronics website shows that a bigger version with 128kByte flash of the chip exists. The part number is STM32F072CBT6. Everything else (pinout, supply voltage, physical dimensions) is exactly the same. The difference is very subtle in the part name: C8 vs CB * STM32F072C8T6 (64kByte Flash program memory) * STM32F072CBT6 (128kByte Flash program memory) (STM32F0x0 series of microcontrollers: https://www.st.com/en/microcontrollers-microprocessors/stm32f0x2.html) So I purchased 5x brand new, blank STM32F072CBT6 from RS-Online for $5.22 (AUD) each. (https://au.rs-online.com/web/p/microcontrollers/8805392/) After a couple of weeks I finally had some some time to do the actual chip transplant. [[File:Nanovna-upgrade 01 lets-begin.jpg]] After removing the back cover and the small 450mAh 1S Li-Ion battery, the circuit board shows the original STM32F072C8T6 (big square chip on the left). [[File:Nanovna-upgrade 02 28gauge-wire-underneath.jpg]] I'm using a bit of 28 gauge wire underneath the pins to pull them away from the pads after heating them with a soldering iron. [[File:Nanovna-upgrade 03 one-side-loose.jpg]] This is the first row of pins unsoldered using the wire-pulling method. [[File:Nanovna-upgrade 04 all-sides-loose.jpg]] After some more work all four sides are now desoldered and the chip is free from the circuit board. [[File:Nanovna-upgrade 05 clean-pads.jpg]] To make sure the new chip is flat and even on the circuit board all pads are cleaned with solder wick. [[File:Nanovna-upgrade 06 new-chips.jpg]] Then comes the exciting moment of picking a new chip from the packet. [[File:Nanovna-upgrade 07 position-chip.jpg]] Positioning the new chip exactly on the pads and holding it down with some weight. Now it's time to begin soldering the new chip on the board. [[File:Nanovna-upgrade 08 all-soldered-up.jpg]] All soldered up and excess tin removed with solder wick. Looking good. [[File:Nanovna-upgrade 09 STLink-connections-to-pcb.jpg]] The NanoVNA has the connection pins for programming the chip close to the edge of the board, easy.. [[File:Nanovna-upgrade 10 STLink-programmer.jpg]] STM chips have their own programmer. This one I bought off eBay for about $5. Connected with just 4 wires is all you need. [[File:Nanovna-upgrade 11 programming-new-firmware jolly-good.jpg]] Using the STLink programming software to load up the new firmware. It succeeds at first try. Jolly good! [[File:Nanovna-upgrade 12 it-werks.jpg]] After uploading the new firmware the NanoVNA is switched on for the first time and it all looks good. Notice that there is now a small battery indicator icon in the top-left corner. An additional diode is required to make the icon show some voltage level, but this feature was never present in the old firmware. [[File:Nanovna-upgrade 13 firmware-info.jpg]] Another feature that is now present in the firmware is a 'config' page that reveals which firmware you're actually running. Very handy. The NanoVNA is now running with 128kByte Flash memory and the firmware version is edy555 v0.7.0 (23 Feb 2020) Very happy to see that the firmware upgrade went pretty much effortlessly and I didn't have to worry about bootloaders, eeprom or anything else. Everything just works and the device now runs the latest firmware. a81d35329d222cc3fee2f38744869909479c1b79 Console-colours 0 835 3381 3380 2020-05-13T21:58:11Z Admin 1 wikitext text/x-wiki When working with Linux remotely over ssh it's sometimes nice to be able to work with a different colour scheme (or color scheme as some write). With ssh clients like Putty it's easy to change the foreground and background colours of the characters, but Linux supports different colours for different types of data; sometimes based on the file extension, sometimes based on functionality (e.g. directory names, command prompt, current working directory, bold text, links, etc..). Below are listed the most commonly used colour sets and some instructions on how to change them. ===change bash prompt colours=== The bash prompt can show colors for username, hostname and current working directory. The colours as well as the components that determine what the prompt should contain are all set in the PS1 environment variable. The PS1 string is usually set in ~/.bashrc and can look something like this: <pre> PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' </pre> Pay attention at the part \u@\h it is saying "user@host" and the number before it \[\033[01;32m\] indicates the color. This is what needs changing if you want a different colour. The \u and \h are the username and hostname, but there are more: <pre> \u username \h system host name \w current (working) directory \$ show a # if the effective UID is 0 (i.e. root user), otherwise display a $ \a unknown \@ time in 12-hour am/pm format </pre> The full PS1 string looks quite complicated, but here is it broken up into the various pieces: Set a colour and display the username, @-sign and hostname <pre> \[\033[01;32m\]\u@\h </pre> Remove any colour codes (use the terminal default) and display the ':' sign <pre> \[\033[00m\]: </pre> Set a colour and display the current working directory <pre> \[\033[01;34m\]\w </pre> Once again disable any colour codes and display just the '$' sign <pre> \[\033[00m\]\$ </pre> The actual colour is defined by the semicolon-separated number pair that is inside the inner square brackets (e.g. '01;32'). All the extra stuff is just escape characters and color-begin and color-end markers. The colors numbers are: <pre> Black 0;30 Dark Gray 1;30 Blue 0;34 Light Blue 1;34 Green 0;32 Light Green 1;32 Cyan 0;36 Light Cyan 1;36 Red 0;31 Light Red 1;31 Purple 0;35 Light Purple 1;35 Brown 0;33 Yellow 1;33 Light Gray 0;37 White 1;37 </pre> ===change manpage colors=== When man pages are viewed, they are piped through a program called 'less', which offers page navigation and search capabilities of the man-page text. The idea is to override the colour settings that less uses. edit and add the following lines to ~/.bashrc to load up the new colourscheme. <pre> export LESS_TERMCAP_mb=$(printf '\e[01;31m') # enter blinking mode - red export LESS_TERMCAP_md=$(printf '\e[01;35m') # enter double-bright mode - bold, magenta export LESS_TERMCAP_me=$(printf '\e[0m') # turn off all appearance modes (mb, md, so, us) export LESS_TERMCAP_se=$(printf '\e[0m') # leave standout mode export LESS_TERMCAP_so=$(printf '\e[01;33m') # enter standout mode - yellow export LESS_TERMCAP_ue=$(printf '\e[0m') # leave underline mode export LESS_TERMCAP_us=$(printf '\e[04;36m') # enter underline mode - cyan </pre> The color codes are as follows: <pre> 30 – black 31 – red 32 – green 33 – orange 34 – blue 35 – magenta 36 – cyan 37 – white </pre> Some other escape codes which you could use include: <pre> 0 – reset/normal 1 – bold 3 – italic/reversed 4 – underlined 5 – blink </pre> ===change vi (vim) colours=== The vi editor has a range of color schemes available that are defined in /usr/share/vim/vim74/colors/ Adding: <pre> colo blue </pre> ..to ~/.vimrc will use the 'blue' colorscheme. Other options are: <pre> darkblue default delek desert elflord evening industry koehler morning murphy pablo peachpuff ron shine slate torte zellner </pre> You could of course also type: 'colo blue' on the vi status line to immediately change to it. The status line is what appears after you press the <ESCAPE> key and type a : (the colon symbol) Add the following line to your ~/.vimrc to change the bottom line text color (that shows the edit mode, INSERT or REPLACE): <pre> hi ModeMsg term=bold ctermfg=2 gui=bold guifg=SeaGreen </pre> When 'su' -ing into another account, the .vimrc of that su account will override the .vimrc from the account you were coming from. More options: <pre> hi LineNr ctermfg=grey guifg=grey hi Statement ctermfg=black guifg=black hi Identifier ctermfg=darkGreen guifg=darkGreen hi Comment term=bold ctermfg=4 guifg=#406090 hi Constant term=underline ctermfg=Red guifg=#c00058 hi Special term=bold ctermfg=Blue guifg=SlateBlue hi Identifier term=underline ctermfg=Black guifg=Black hi Statement term=bold ctermfg=Brown gui=bold guifg=Brown hi PreProc term=underline ctermfg=Magenta guifg=Magenta3 hi Type term=underline ctermfg=Green gui=bold guifg=SeaGreen hi Ignore cterm=bold ctermfg=7 guifg=bg hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red hi Todo term=standout ctermfg=0 ctermbg=3 guifg=Blue guibg=Yellow </pre> To see all the available (and currently configured color schemes) type the following: <pre> hi </pre> Lastly, vim has been configured on some systems to support Syntax Highlighting. Some find this fantastic, others find this annoying. To turn it off, type 'syntax off' on the status line or include it in your .vimrc file. ===change directory and file type colours=== In some cases you may want to change the file type colours that appear when viewing a directory listing in Linux. Normally, directories are dark blue, .gz files are red, executables are green, etc.. The colours are managed by the LS_COLORS environment variable which can be easily modified with the utility 'dircolors'. Step 1 – Copy the current LS_COLORS to a file in your home folder. <pre> dircolors > ~/.dir_colors </pre> Step 2 – Edit the files to make whatever changes you require. <pre> vi ~/.dir_colors </pre> Step 3 – load the new color scheme whenever a shell starts <pre> echo ". ~/.dir_colors" >> ~/.bashrc </pre> NOTE: when using 'su' the color scheme is inherited from the user you were logged in as. So if the colours while in 'su' are not to your liking, you need to change the dircolors scheme for the pre-su-user, not root. You will notice that the LS_COLORS variable contains many definitions. The dircolors utility has a way of displaying the colour definitions a bit nicer: <pre> dircolors --print-database </pre> The first number is the style (1=bold), followed by a semicolon, and then the actual number of the color, possible styles are: <pre> 0 = default colour 1 = bold 4 = underlined 5 = flashing text 7 = reverse field 40 = black background 41 = red background 42 = green background 43 = orange background 44 = blue background 45 = purple background 46 = cyan background 47 = grey background 100 = dark grey background 101 = light red background 102 = light green background 103 = yellow background 104 = light blue background 105 = light purple background 106 = turquoise background </pre> All possible colors: <pre> 31 = red 32 = green 33 = orange 34 = blue 35 = purple 36 = cyan 37 = grey 90 = dark grey 91 = light red 92 = light green 93 = yellow 94 = light blue 95 = light purple 96 = turquoise </pre> These can even be combined, so that a parameter like: <pre> di=1;4;31;42 </pre> in your LS_COLORS variable would make directories appear in bold underlined red text with a green background! You can also change other kinds of files when using the ls command by defining each kind with: <pre> di = directory fi = file ln = symbolic link pi = fifo file so = socket file bd = block (buffered) special file cd = character (unbuffered) special file or = symbolic link pointing to a non-existent file (orphan) mi = non-existent file pointed to by a symbolic link (visible when you type ls -l) ex = file which is executable (ie. has 'x' set in permissions). *.rpm = files with the ending .rpm </pre> After you alter your .bashrc file, to put the changes in effect you will have to restart your shell. 6674310cdac0cbb6e3bac5346b9a1567a31c9300 Gtk-scroll-behaviour 0 836 3383 2020-05-15T11:07:33Z Admin 1 Created page with " When I left-click anywhere above or below the thumb, it jumps to that position and starts dragging from there. The expected behavior is to scroll one page up or down. When..." wikitext text/x-wiki When I left-click anywhere above or below the thumb, it jumps to that position and starts dragging from there. The expected behavior is to scroll one page up or down. When I right-click anywhere above or below the thumb, it scrolls one page up or down. That is the behavior I expect from left-clicking, the same way it works on GTK2 and QT applications. Horizontal scrollbars have the same problem. The problem is caused by GTK 3, and can be cured by creating or editing a file ~/.config/gtk-3.0/settings.ini with contents [Settings] gtk-primary-button-warps-slider = false https://forums.gentoo.org/viewtopic-t-948904-start-0.html https://askubuntu.com/questions/295988/how-to-fix-gtk3-scrollbar-behavior 6cd11f11557caa5e161e14d9602b225cd49800fe Wireless-setup 0 279 3384 1253 2020-05-21T06:24:35Z Admin 1 wikitext text/x-wiki Required files and packages to set up Wi-Fi for linux <pre> apt-get install wpa-supplicant wireless-tools </pre> /etc/network/interfaces <pre> auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf </pre> /etc/wpa_supplicant/wpa_supplicant.conf <pre> network={ ssid="MYSSID" proto=RSN key_mgmt=WPA-PSK pairwise=CCMP TKIP group=CCMP TKIP psk="mypassword" } </pre> 37f1f087c82847e031902eb306113fa079578702 Disk-Imaging 0 420 3388 3387 2020-05-24T08:14:48Z Admin 1 wikitext text/x-wiki At some stage you may want to take a snapshot image of a complete disk drive, including boot sector. There are various ways of doing this but this page lists my preferred tools to do the job. All these tools require the disk to be fully accessible (i.e. don't have the operating system running on the disk you want to image) Beware that if Windows doesn't understand a filesystem (ext2, ext3, etc..) it will prompt you to 'Initialise' (FORMAT!) the disk. This is almost never what you want, so cancel whatever windows throws at you in these cases. ==Take a disk image== * on Linux Using dd (usually already installed on most Linux systems) - find out what the disks are called by doing a cat on /proc/partitions - use the device name without partitions to use the whole disk (assumes MBR) (e.g. /dev/sdb) <pre> dd if=/dev/sdb of=/data/mydiskimage.dd bs=1M </pre> * on Windows Using Win32DiskImager (freeware), download from here: http://sourceforge.net/projects/win32diskimager/ (size: about 12MB) - pretty simple to use - most often already selects external media by drive letter. - Don't worry if windows doesn't show you all partitions as it probably can't read them (ext2, ext3, etc..) Using dd (freeware), download from here: http://www.chrysocome.net/dd - command-line utility, so open a DOS box first. - Similar syntax should apply here as per the dd command used in Linux - Find out disk name information using the --list argument (see above website) ==Restore a disk image== * on Linux <pre> dd if=/data/mydiskimage.dd of=/dev/sdb bs=1M </pre> * on Windows Using dd (freeware), download from here: http://www.chrysocome.net/dd (size: about 200kB) - command-line utility, so open a DOS box first. - Similar syntax should apply here as per the dd command used in Linux - Find out disk name information using the --list argument (see above website) Using Win32DiskImager - pretty simple to use, most often already selects external media by drive letter. ===If the target disk is smaller than the original disk=== If the target disk you want to restore an image to is smaller in size than the original disk you took the image from you will run into some error messages telling you that the original image is too big. The dd command will simply throw some warning messages but tries to do as much as possible. However Win32DiskImager will not even do this. Read on if you really need to use Win32DiskImager to restore the image. From this point on I will just assume that you understand the dangers of possible data loss, etc.. To truncate the image so you can use Win32DiskImager to restore to a smaller disk you simply create a new image from the existing image but read less data from it. We can do this with the dd command as follows: <pre> dd if=/data/bigimage.dd of=/data/smallimage bs=1M count=xxxx </pre> ..where count=xxxx is the number of Megabytes that will fit on the smaller target drive. You may need to experiment with this to minimise the loss of data while still being able to fit it on the smaller disk. ==Look inside a disk image== * on Linux Using mount (usually already installed on most Linux systems) Before we can mount a partition that's inside a dd image we need to know the disk layout. If we still have the original disk handy at /dev/sdb we can simply issue: <pre> fdisk /dev/sdb -l Disk /dev/sdb: 3.7 GiB, 3951034368 bytes, 7716864 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x000714e9 Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 122879 114688 56M c W95 FAT32 (LBA) /dev/sdb2 122880 7290879 7168000 3.4G 83 Linux </pre> However, if the dd image is the only thing you have then you'll have to tell fdisk to look at the dd image rather than a device, like so: <pre> fdisk myimage.dd -l Disk myimage.dd: 3.7 GiB, 3951034368 bytes, 7716864 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x000714e9 Device Boot Start End Sectors Size Id Type myimage.dd1 8192 122879 114688 56M c W95 FAT32 (LBA) myimage.dd2 122880 7290879 7168000 3.4G 83 Linux </pre> Same thing. In order to mount a specific partition within a dd image we can invoke the 'mount' command with an 'offset' parameter. This offset is used to skip a number of Bytes within the dd image to jump to the beginning of a partition. Fdisk lists each partition offset in sectors in the 'Start' column. This number is the Sector number at which the partition begins. Now look closely in the output of the fdisk command and confirm the size of a sector, in the above example each sector is 512 bytes. If we now multiply the Start sector number by 512 Bytes we get the offset in Bytes where the partition begins. For example, to mount the second partition in the above example we multiply 122880 x 512 = 62914560 to find the offset in Bytes. We can then issue the mount command as follows: <pre> mount -o loop,offset=62914560 mydiskimage.dd /mnt </pre> * on Windows Since Windows natively cannot read ext2 filesystems a third-party driver is required. - grab the Windows Ext2Fsd driver (freeware) from here: http://www.ext2fsd.com/?page_id=7 - Downloading and running the Ext2Fsd-xxxx.exe is the easiest way. The file size is about 1MB - tick all boxes to support read/write access and automatic loading of the driver at startup. Since Windows does not know how to mount an image a third-party tool is required. - grab OFSmount (freeware) from here: http://www.osforensics.com/tools/mount-disk-images.html - Either use the 32-bit or 64-bit version depending on your version of windows. The file size is about 2MB Once these programs are installed it is simply a matter of opening a partition of the image file with OFSmount and the ext2, ext3 directories will be mounted as a normal Drive-Letter in Windows. You can then use Windows (file) Explorer to navigate through the mounted image files and directories. Make sure to unmount the image when done. dc7cf94532cee4236b9c6c4e485dd46b6d9c9caf Linux info 0 25 3391 3382 2020-07-27T09:55:45Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] dcee9ad55010bb9408b90ebe31de41f24a40272c Computers 0 282 3394 3000 2020-07-27T10:02:36Z Admin 1 wikitext text/x-wiki [[Raspberry Pi]] [[Sheeva Plug]] [[NSLU2]] e667f7706c5dc0684377d7df5626cb802f5a62bf Javascript 0 838 3397 3396 2020-07-27T10:07:39Z Admin 1 wikitext text/x-wiki JSON things I used in my node-red home automation projects Code to read multiple DS18B20 or DS18S20 temperature sensors from a Wemos D1 mini and feed them into a graph object in node-red <pre> var obj = JSON.parse(msg.payload); /* example output from topic 'house/wemos2/tele/SENSOR' { "Time":"2020-07-26T10:38:21", "DS18S20-1":{"Id":"000802015ED5","Temperature":20.3}, "DS18B20-2":{"Id":"02131E3901AA","Temperature":19.8}, "TempUnit":"C" } */ if ("DS18S20-1" in obj) { var msg1 = { payload : obj['DS18S20-1'].Temperature, topic : "Peltier-Cold" } } if ("DS18B20-2" in obj) { var msg2 = { payload : obj['DS18B20-2'].Temperature, topic : "Inside Box" } } if ("DS18B20-3" in obj) { var msg3 = { payload : obj['DS18B20-3'].Temperature, topic : "Peltier Hot" } } node.send([[msg1,msg2,msg3]]); </pre> 70f4b24d7382e4d58a28599ff6d73502c4ad7fd1 Amateur Radio 0 237 3404 3389 2020-09-15T11:16:49Z Admin 1 wikitext text/x-wiki [[File:Australian Band Plans 140709.pdf]] WIA - Australian Amateur Band Plans - updated 09/07/2014 * My entry on [http://www.qrz.com/db/VK2CEL www.qrz.com] * Some [[International contests]] * [[2018 VK Contest Dates]] (Phone) * [[2017 VK Contest Dates]] (Phone) * [[2016 VK Contest Dates]] (Phone) * [[2015 VK Contest Dates]] (Phone) * [[2014 VK Contest Dates]] (Phone) * [[2013 VK Contest Dates]] (Phone) * [[aprs]] * [[sdr]] * [[qrp]] (Low Power) * [[impedance matching]] * [[common mode interference]] * [[baluns]] * [[low-cost antenna shootout 70cm]] * [[Ionosphere]] * [[QCX-transceiver]] * Online Intermodulation Calculator: http://www.marcelpost.com/intermod/ * [[RS41]] Radiosonde STM32 fun 12f8d491fbcba2254dc81f444e6430a73838df28 RS41 0 839 3405 2020-09-15T11:18:13Z Admin 1 Created page with "The Vaisala RS41 radiosonde modules are literally STM32 boards falling out of the sky. Here is a crude collection of links to tie things on one page [[RS41-flashing]]" wikitext text/x-wiki The Vaisala RS41 radiosonde modules are literally STM32 boards falling out of the sky. Here is a crude collection of links to tie things on one page [[RS41-flashing]] 7e821746ed4270397310a71debcf21516cf8d9db File:RS41-on-off-button.jpg 6 841 3410 2020-09-15T22:34:47Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 RS41-flashing 0 840 3411 3409 2020-09-15T22:35:09Z Admin 1 wikitext text/x-wiki If you've just retrieved an RS41 radiosonde and wonder how to get started with flashing it with your own code then this page is for you. ===stopping the transmitter=== When an RS41 is launched it holds 2x AA batteries that will keep the radiosonde transmitting for about 6 hours. The simplest way to stop the RS41 from transmitting is to press the on/off button briefly. The button is located under the sticker with the serial number, but just press it until the LED turns off. [[File:RS41-on-off-button.jpg]] ===open the case=== Pry open the two plastic tabs on the top and bottom to separate the two styrofoam halves that encapsulates the RS41 circuit board. ===Connecting to the RS41 programming header=== If you have a 2mm-pitch 2x5 IDC connector laying around you can use that, but most people will just have to solder four wires to the programming header. <pre> ____________________ ____________________| (circuit board) | 2 4 6 8 10 | | 1 3 5 7 9 | (programming connector) +------------+ pin ------------ 1 GND 2 3 4 Vcc (3.3V !!) 5 6 7 8 SWCLK 9 SWDIO 10 </pre> Using a USB ST-Link programming dongle we connect the wires. ===setting up the STM32 compiler environment=== apt-get install ===install the ST-Link software=== Don't use the Debian apt version of stlink, but instead use the one on github or grab it with pip (python installer) git clone https://github.com/stlink-org/stlink.git pip ===clear the write-protect flag of the flash memory=== <pre> start stlink debugger - batteries not required (power STM32 straight from STLink) - button press not required in one screen run: ---[openocd debugger]--- map@zhora:~/local/radiosonde-rs41$ openocd -f /usr/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg Open On-Chip Debugger 0.10.0 Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'. Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD adapter speed: 1000 kHz adapter_nsrst_delay: 100 none separate Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : clock speed 950 kHz Info : STLINK v2 JTAG v29 API v2 SWIM v7 VID 0x0483 PID 0x3748 Info : using stlink api v2 Info : Target voltage: 3.306883 Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints ---[]--- then run telnet on another screen ---[telnet localhost 4444]--- map@zhora:~/local/radiosonde-rs41$ telnet localhost 4444 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Open On-Chip Debugger > reset > halt target halted due to debug-request, current mode: Handler HardFault xPSR: 0x41000003 pc: 0x0800d5fc msp: 0x200015c0 > flash info 0 device id = 0x10016420 STM32 flash size failed, probe inaccurate - assuming 128k flash flash size = 128kbytes #0 : stm32f1x at 0x08000000, size 0x00020000, buswidth 0, chipwidth 0 # 0: 0x00000000 (0x400 1kB) protected # 1: 0x00000400 (0x400 1kB) protected # 2: 0x00000800 (0x400 1kB) protected # 3: 0x00000c00 (0x400 1kB) protected # 4: 0x00001000 (0x400 1kB) protected # 5: 0x00001400 (0x400 1kB) protected # 6: 0x00001800 (0x400 1kB) protected # 7: 0x00001c00 (0x400 1kB) protected # 8: 0x00002000 (0x400 1kB) protected # 9: 0x00002400 (0x400 1kB) protected # 10: 0x00002800 (0x400 1kB) protected # 11: 0x00002c00 (0x400 1kB) protected # 12: 0x00003000 (0x400 1kB) protected # 13: 0x00003400 (0x400 1kB) protected # 14: 0x00003800 (0x400 1kB) protected # 15: 0x00003c00 (0x400 1kB) protected # 16: 0x00004000 (0x400 1kB) protected # 17: 0x00004400 (0x400 1kB) protected # 18: 0x00004800 (0x400 1kB) protected # 19: 0x00004c00 (0x400 1kB) protected # 20: 0x00005000 (0x400 1kB) protected # 21: 0x00005400 (0x400 1kB) protected # 22: 0x00005800 (0x400 1kB) protected # 23: 0x00005c00 (0x400 1kB) protected # 24: 0x00006000 (0x400 1kB) protected # 25: 0x00006400 (0x400 1kB) protected # 26: 0x00006800 (0x400 1kB) protected # 27: 0x00006c00 (0x400 1kB) protected # 28: 0x00007000 (0x400 1kB) protected # 29: 0x00007400 (0x400 1kB) protected # 30: 0x00007800 (0x400 1kB) protected # 31: 0x00007c00 (0x400 1kB) protected # 32: 0x00008000 (0x400 1kB) protected # 33: 0x00008400 (0x400 1kB) protected # 34: 0x00008800 (0x400 1kB) protected # 35: 0x00008c00 (0x400 1kB) protected # 36: 0x00009000 (0x400 1kB) protected # 37: 0x00009400 (0x400 1kB) protected # 38: 0x00009800 (0x400 1kB) protected # 39: 0x00009c00 (0x400 1kB) protected # 40: 0x0000a000 (0x400 1kB) protected # 41: 0x0000a400 (0x400 1kB) protected # 42: 0x0000a800 (0x400 1kB) protected # 43: 0x0000ac00 (0x400 1kB) protected # 44: 0x0000b000 (0x400 1kB) protected # 45: 0x0000b400 (0x400 1kB) protected # 46: 0x0000b800 (0x400 1kB) protected # 47: 0x0000bc00 (0x400 1kB) protected # 48: 0x0000c000 (0x400 1kB) protected # 49: 0x0000c400 (0x400 1kB) protected # 50: 0x0000c800 (0x400 1kB) protected # 51: 0x0000cc00 (0x400 1kB) protected # 52: 0x0000d000 (0x400 1kB) protected # 53: 0x0000d400 (0x400 1kB) protected # 54: 0x0000d800 (0x400 1kB) protected # 55: 0x0000dc00 (0x400 1kB) protected # 56: 0x0000e000 (0x400 1kB) protected # 57: 0x0000e400 (0x400 1kB) protected # 58: 0x0000e800 (0x400 1kB) protected # 59: 0x0000ec00 (0x400 1kB) protected # 60: 0x0000f000 (0x400 1kB) not protected # 61: 0x0000f400 (0x400 1kB) not protected # 62: 0x0000f800 (0x400 1kB) not protected # 63: 0x0000fc00 (0x400 1kB) not protected # 64: 0x00010000 (0x400 1kB) not protected # 65: 0x00010400 (0x400 1kB) not protected # 66: 0x00010800 (0x400 1kB) not protected # 67: 0x00010c00 (0x400 1kB) not protected # 68: 0x00011000 (0x400 1kB) not protected # 69: 0x00011400 (0x400 1kB) not protected # 70: 0x00011800 (0x400 1kB) not protected # 71: 0x00011c00 (0x400 1kB) not protected # 72: 0x00012000 (0x400 1kB) not protected # 73: 0x00012400 (0x400 1kB) not protected # 74: 0x00012800 (0x400 1kB) not protected # 75: 0x00012c00 (0x400 1kB) not protected # 76: 0x00013000 (0x400 1kB) not protected # 77: 0x00013400 (0x400 1kB) not protected # 78: 0x00013800 (0x400 1kB) not protected # 79: 0x00013c00 (0x400 1kB) not protected # 80: 0x00014000 (0x400 1kB) not protected # 81: 0x00014400 (0x400 1kB) not protected # 82: 0x00014800 (0x400 1kB) not protected # 83: 0x00014c00 (0x400 1kB) not protected # 84: 0x00015000 (0x400 1kB) not protected # 85: 0x00015400 (0x400 1kB) not protected # 86: 0x00015800 (0x400 1kB) not protected # 87: 0x00015c00 (0x400 1kB) not protected # 88: 0x00016000 (0x400 1kB) not protected # 89: 0x00016400 (0x400 1kB) not protected # 90: 0x00016800 (0x400 1kB) not protected # 91: 0x00016c00 (0x400 1kB) not protected # 92: 0x00017000 (0x400 1kB) not protected # 93: 0x00017400 (0x400 1kB) not protected # 94: 0x00017800 (0x400 1kB) not protected # 95: 0x00017c00 (0x400 1kB) not protected # 96: 0x00018000 (0x400 1kB) not protected # 97: 0x00018400 (0x400 1kB) not protected # 98: 0x00018800 (0x400 1kB) not protected # 99: 0x00018c00 (0x400 1kB) not protected #100: 0x00019000 (0x400 1kB) not protected #101: 0x00019400 (0x400 1kB) not protected #102: 0x00019800 (0x400 1kB) not protected #103: 0x00019c00 (0x400 1kB) not protected #104: 0x0001a000 (0x400 1kB) not protected #105: 0x0001a400 (0x400 1kB) not protected #106: 0x0001a800 (0x400 1kB) not protected #107: 0x0001ac00 (0x400 1kB) not protected #108: 0x0001b000 (0x400 1kB) not protected #109: 0x0001b400 (0x400 1kB) not protected #110: 0x0001b800 (0x400 1kB) not protected #111: 0x0001bc00 (0x400 1kB) not protected #112: 0x0001c000 (0x400 1kB) not protected #113: 0x0001c400 (0x400 1kB) not protected #114: 0x0001c800 (0x400 1kB) not protected #115: 0x0001cc00 (0x400 1kB) not protected #116: 0x0001d000 (0x400 1kB) not protected #117: 0x0001d400 (0x400 1kB) not protected #118: 0x0001d800 (0x400 1kB) not protected #119: 0x0001dc00 (0x400 1kB) not protected #120: 0x0001e000 (0x400 1kB) not protected #121: 0x0001e400 (0x400 1kB) not protected #122: 0x0001e800 (0x400 1kB) not protected #123: 0x0001ec00 (0x400 1kB) not protected #124: 0x0001f000 (0x400 1kB) not protected #125: 0x0001f400 (0x400 1kB) not protected #126: 0x0001f800 (0x400 1kB) not protected #127: 0x0001fc00 (0x400 1kB) not protected STM32F100 (Low/Medium Density) - Rev: Z > > reset > halt > flash protect 0 0 last off Device Security Bit Set target halted due to breakpoint, current mode: Handler HardFault xPSR: 0x61000003 pc: 0x2000003a msp: 0x200015c0 cleared protection for sectors 0 through 127 on flash bank 0 > flash info 0 device id = 0x10016420 flash size = 64kbytes #0 : stm32f1x at 0x08000000, size 0x00010000, buswidth 0, chipwidth 0 # 0: 0x00000000 (0x400 1kB) not protected # 1: 0x00000400 (0x400 1kB) not protected # 2: 0x00000800 (0x400 1kB) not protected # 3: 0x00000c00 (0x400 1kB) not protected # 4: 0x00001000 (0x400 1kB) not protected # 5: 0x00001400 (0x400 1kB) not protected # 6: 0x00001800 (0x400 1kB) not protected # 7: 0x00001c00 (0x400 1kB) not protected # 8: 0x00002000 (0x400 1kB) not protected # 9: 0x00002400 (0x400 1kB) not protected # 10: 0x00002800 (0x400 1kB) not protected # 11: 0x00002c00 (0x400 1kB) not protected # 12: 0x00003000 (0x400 1kB) not protected # 13: 0x00003400 (0x400 1kB) not protected # 14: 0x00003800 (0x400 1kB) not protected # 15: 0x00003c00 (0x400 1kB) not protected # 16: 0x00004000 (0x400 1kB) not protected # 17: 0x00004400 (0x400 1kB) not protected # 18: 0x00004800 (0x400 1kB) not protected # 19: 0x00004c00 (0x400 1kB) not protected # 20: 0x00005000 (0x400 1kB) not protected # 21: 0x00005400 (0x400 1kB) not protected # 22: 0x00005800 (0x400 1kB) not protected # 23: 0x00005c00 (0x400 1kB) not protected # 24: 0x00006000 (0x400 1kB) not protected # 25: 0x00006400 (0x400 1kB) not protected # 26: 0x00006800 (0x400 1kB) not protected # 27: 0x00006c00 (0x400 1kB) not protected # 28: 0x00007000 (0x400 1kB) not protected # 29: 0x00007400 (0x400 1kB) not protected # 30: 0x00007800 (0x400 1kB) not protected # 31: 0x00007c00 (0x400 1kB) not protected # 32: 0x00008000 (0x400 1kB) not protected # 33: 0x00008400 (0x400 1kB) not protected # 34: 0x00008800 (0x400 1kB) not protected # 35: 0x00008c00 (0x400 1kB) not protected # 36: 0x00009000 (0x400 1kB) not protected # 37: 0x00009400 (0x400 1kB) not protected # 38: 0x00009800 (0x400 1kB) not protected # 39: 0x00009c00 (0x400 1kB) not protected # 40: 0x0000a000 (0x400 1kB) not protected # 41: 0x0000a400 (0x400 1kB) not protected # 42: 0x0000a800 (0x400 1kB) not protected # 43: 0x0000ac00 (0x400 1kB) not protected # 44: 0x0000b000 (0x400 1kB) not protected # 45: 0x0000b400 (0x400 1kB) not protected # 46: 0x0000b800 (0x400 1kB) not protected # 47: 0x0000bc00 (0x400 1kB) not protected # 48: 0x0000c000 (0x400 1kB) not protected # 49: 0x0000c400 (0x400 1kB) not protected # 50: 0x0000c800 (0x400 1kB) not protected # 51: 0x0000cc00 (0x400 1kB) not protected # 52: 0x0000d000 (0x400 1kB) not protected # 53: 0x0000d400 (0x400 1kB) not protected # 54: 0x0000d800 (0x400 1kB) not protected # 55: 0x0000dc00 (0x400 1kB) not protected # 56: 0x0000e000 (0x400 1kB) not protected # 57: 0x0000e400 (0x400 1kB) not protected # 58: 0x0000e800 (0x400 1kB) not protected # 59: 0x0000ec00 (0x400 1kB) not protected # 60: 0x0000f000 (0x400 1kB) not protected # 61: 0x0000f400 (0x400 1kB) not protected # 62: 0x0000f800 (0x400 1kB) not protected # 63: 0x0000fc00 (0x400 1kB) not protected STM32F100 (Low/Medium Density) - Rev: Z > ---[]--- </pre> ===flasing firmware=== once the flash has been set to unprotected, it is now possible to write the .bin file in one simple way: st-flash --format binary write RS41HUP.bin 0x8000000 btw, you may need to time it right to start this command as it may only accept incoming resets/writing data at the very beginning of powering up the device. === 93a468ad711039aca3c5d86aeee716f351344fff File:Rpi-pushbutton-pinout.jpg 6 842 3412 2020-09-16T07:06:57Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Rpi-button-cable.jpg 6 843 3421 2020-09-16T07:39:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Rpi-shutdown-button 0 286 3428 3427 2020-09-16T07:54:55Z Admin 1 wikitext text/x-wiki A simple but very useful circuit to add to the raspberry pi's GPIO header is a Shutdown/Reset button with a feedback LED. - pressing the button briefly triggers a reset - pressing the button > 4 seconds triggers a shutdown A status LED will indicate whether a reboot or shutdown has been initiated and will just blink once every 10 seconds to show that the computer is running and just doing its thing. [[File:SP0620.jpg|200px|thumb|none|Rpi shutdown button]] Schematic: [[File:Rpi-shutdown-button-schematic.png|none]] The current draw for each individual GPIO pin must stay below 16mA, and the total draw for the whole 3.3V power rail must stay below 50mA. Using a 1k resistor for an LED we will have a current draw of less than 4mA. Parts list: The pushbutton with LED illumination I used for this project was purchased from Jaycar. * Part Number: SP0620 - SPST PCB Mount Tactile - Metallic Vertical with LED - Red http://www.jaycar.com.au/Electromechanical-Components/Switches/Tactile/SPST-PCB-Mount-Tactile---Metallic-Vertical-with-LED---Red/p/SP0620 * 2x 1k Ohm 1/4W resistors * 1x 3-pin .1" pitch IDC header * 10cm ribbon cable (three wires) * heat shrink (2mm diameter) How to connect everything: * strip a short bit of insulation on three wires of the ribbon cable from one end * cut three small bits of heat shrink and shove over each of the three stripped wires * solder the ends of the three stripped wires to the 3-pin IDC header * cover the connections with heat shrink and apply heat to shrink them in place * from the other end of the ribbon cable, cut the middle and one outer wire 5cm shorter * trim the leads from the two resistor so that only a short bit of wire remains * solder a resistor on each end of the two wires * solder the cut-off 5cm pieces of wire to each of the resistor's other end You should now have something like this: [[File:Rpi-button-cable.jpg]] * shove some short bits of heat shrink over the two resistors so the connections are insulated * trim the ends of the two wires with resistors so that all wires are the same length * familiarise yourself with the pinout of the pushbutton [[File:Rpi-pushbutton-pinout.jpg]] * bend pin 1 from switch 1 so it touches the Cathode pin of the LED and solder these together * solder the ribbon cable wire without resistors to the joint connection from the previous step (this will be the GND wire) * solder the middle wire to the Anode (the long pin in the middle of the switch, this will be the LED wire) * and lastly, solder the remaining wire to pin 2 of switch 1 When all done, the connections to the switch should look something like in the below picture. [[File:Rpi-shutdown-button-text.jpg|500px|thumb|none|Rpi shutdown button]] Use this image to connect the IDC header onto the Raspberry Pi connection header pins. Python button-listener program: [[File:Rpi-shutdown-monitor.zip]] * installing the software install the python gpio library: <pre> apt-get install python-rpi.gpio </pre> Copy the python button-listener program to /usr/local/bin/shutdown-monitor.py Then, set the permissions: <pre> chmod 700 /usr/local/bin/shutdown-monitor.py </pre> add to the command to the startup script: <pre> vi /etc/rc.local </pre> near the end of the script, but above the 'exit 0', enter the following line: <pre> /usr/bin/python /usr/local/bin/shutdown-monitor.py > /dev/null 2>&1 & </pre> The full code for the shutdown monitor: <pre> # This script will wait for a button to be pressed and then shutdown # the Raspberry Pi. import time from time import sleep import RPi.GPIO as GPIO import os GPIO.setmode(GPIO.BOARD) # Pin 21 will be input and will have its pull-up resistor (to 3V3) activated # so we only need to connect a push button with a current limiting resistor to ground GPIO.setup(21, GPIO.IN, pull_up_down = GPIO.PUD_UP) # GPIO10 (on pin 23) will be our LED pin GPIO.setup(23, GPIO.OUT) GPIO.output(23, GPIO.HIGH) sleep(1) GPIO.output(23, GPIO.LOW) int_active = 0 # ISR: if our button is pressed, we will have a falling edge on pin 21 # this will trigger this interrupt: def Int_shutdown(channel): # button is pressed # possibly shutdown our Raspberry Pi global int_active # only react when there is no other shutdown process running if (int_active == 0): int_active = 1 pressed = 1 shutdown = 0 # turn LED on GPIO.output(23, GPIO.HIGH) # count how long the button is pressed counter = 0 while ( pressed == 1 ): if ( GPIO.input(21) == False ): # button is still pressed counter = counter + 1 # break if we count beyond 20 (long-press is a shutdown) if (counter >= 20): pressed = 0 else: sleep(0.2) else: # button has been released pressed = 0 # button has been released, dim LED, count cycles and determine action GPIO.output(23, GPIO.LOW) # count how long the button was pressed if (counter < 2): # short press, do nothing pressed = 0 int_active = 0 else: # longer press if (counter < 20): # medium length press, initiate system reboot print("rebooting..") # run the reboot command as a background process os.system("shutdown -r 0&") # blink fast until the system stops blink = 1 while (blink > 0): sleep(0.15) GPIO.output(23, GPIO.HIGH) sleep(0.15) GPIO.output(23, GPIO.LOW) else: # long press, initiate system shutdown print("shutting down..") # run the shutdown command as a background process os.system("shutdown -h 0&") # blink slow until system stops blink = 1 while (blink > 0): sleep(1) GPIO.output(23, GPIO.HIGH) sleep(1) GPIO.output(23, GPIO.LOW) # Now we are programming pin 21 as an interrupt input # it will react on a falling edge and call our interrupt routine "Int_shutdown" GPIO.add_event_detect(21, GPIO.FALLING, callback = Int_shutdown, bouncetime = 1000) # blink once every couple of seconds while waiting for button to be pressed while 1: time.sleep(10) # only blink when the button isn't pressed if ( GPIO.input(21) == True ): # only blink when there's no shutdown in progress if (int_active == 0): GPIO.output(23, GPIO.HIGH) sleep(0.1) GPIO.output(23, GPIO.LOW) sleep(0.1) # That's all folks! </pre> 2296f384e15730bdae1495ca378998614b60ae06 Programs 0 72 3432 3395 2020-12-17T04:59:20Z Admin 1 wikitext text/x-wiki Some of my Electronics projects work in a client-server type fashion where the Electronics project is enhanced by (or in some case cannot work without) some form of counterpart in the form of a piece of software that resides on another device (e.g. a PC running some kind of operating system). In other cases I have written software that runs stand-alone on a system (e.g on Windows or Linux or on a mobile phone). This is the top page that lists the various categories. Where possible I have added the specific application for it. ==By Language== * [[C and C++]] * [[Java]] * [[Assembler]] * [[Linux_Bash]] * [[php]] * [[DOS_Batch]] * [[Javascript]] * [[Python]] ==By Target Device== * [[Android]] * [[Nokia]] * [[PC]] * [[Microcontrollers]] ==Third-Party device drivers== * [[CH340-UART]] 3894221f2c001798684b10a8c4a625ee4b28c84c Python 0 844 3481 3440 2020-12-23T03:28:19Z Admin 1 wikitext text/x-wiki python things * [[python-datastructures]] Data structures provide ways to store, access and minipulate collections of data. Python has several built-in implementations of data structures and this page will attempt to show the differences as well as provide examples on how to use them. 943f08d935b183aec6752e8e1e6a6fde90502d3d Python-datastructures 0 846 3482 3480 2020-12-23T03:29:03Z Admin 1 wikitext text/x-wiki "In computer science, a data structure is a data organization, management, and storage format that enables efficient access and modification. More precisely, a data structure is a collection of data values, the relationships among them, and the functions or operations that can be applied to the data." -- source: Wikipedia Python knows how to work with of several types of data structures without the need to import additional libraries. Sometimes you do need to import a library to provide support (e.g. json, csv, sql) but most of these are already available when you have python installed. In rare cases you may need to build or acquire a third-party library for data structure support. In these pages we mainly look at the most common data structures in python: {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Examples</b> |style="background-color:#f2f2f2;"|<b>Details</b> |style="background-color:#f2f2f2;"|<b>Characteristic</b> |- |[[Tuple]] |('January', 'February', 'March', 'April', 'May') (2, 3, 5, 7, 11, 13, 17, 19, 23, 29) |Once set, values cannot be changed Referenced with index |surrounded by one single open and closed parenthesis elements separated by a comma Strings are enclosed by apostrophes or quotes |- |[[python-lists|List]] |[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] ['red', 'green', 'orange', 'blue'] |Values can be modified, added, deleted Referenced with index |surrounded by one single open and closed square bracket elements separated by a comma Strings are enclosed by apostrophes or quotes |- |[[Dictionary]] |{'Joe':02079343, 'Alice':010534045, 'Bob':01084523} {'x':234, 'y':345, 'z':456} |Values can be modified, added, deleted Referenced with a key |surrounded by one single open and closed curly brace elements separated by a comma each element contains one key and one value key and value are separated by a colon key maybe a string or a number strings (key or value) are enclosed by quotes keys must be unique |- |[[Set]] |([1029, 1238, 7821, 4312, 2716]) |Once set, values cannot be modified Set values can be added and removed Set may only contain unique values Unordered |single square brackets surrounded by single parenthesis elements separated by a comma strings are enclosed by apostrophes or quotes |- |[[json]] |[{ "first": "Joe', "hobbies": "swimming, running" } { "first": "Carol', "hobbies": "cycling, climbing" }] |Values can be modified, added, deleted Referenced with a key |surrounded by one single open and closed curly brace (1x record) multiple records surrounded by one single square open and close bracket records surrounded by curly braces record elements separated by a comma each element contains one key and one value key and value are separated by a colon keys surrounded by double quotes strings are enclosed by apostrophes or quotes |- |[[csv]] |silver,32423,joe bloggs,"8,5",023-32425634,,,type=1,f |once set, values cannot be modified |elements separated by a comma one record per line elements enclosed by quotes if string contains a comma |} 713f4a3e131ff4f478503f428472cb68886da31b Python-lists 0 845 3487 3486 2020-12-23T03:40:59Z Admin 1 wikitext text/x-wiki parsing lists in python (back to [[python-datastructures]]) ===Example #1 (some basic list manipulation)=== <pre> # # # python list examples # # #1 one-dimensional ('flat/unnested') lists list1 = [1,2,3.14,'red','green'] # NOTE#1: strings may be surrounded by apostrophes or quotes or mixed # the output will convert quotes to apostrophes # #goodlist = [1,2,3.14,'red','green'] # strings with apostrophes #goodlist = [1,2,3.14,'red',"green"] # mixed apostrophes and quotes #goodlist = [1,2,3.14,"red","green"] # all quotes # NOTE#2: don't surround lists with quotes or apostrophes! # #wronglist = '[1,2,3.14,"red","green"]' # list surrounded by apostrophes #wronglist = "[1,2,3.14,'red','green']" # list surrounded by quotes print('list1: ' + str(list1) ) # NOTE#3: concatenate a list to a string by surrounding it with 'str()' # # print('list1: ' + list1) # incorrect # print('list1: ' , list1) # ok, but shows parenthesis and quotes from string # print('list1: ' + str(list1)) # correct # print(list1) # correct (but not concatenated) for x in list1: print(x) print('') print('') print ('show 4th element: ' + str(list1[3])) print('') print('modify 4th element from \'red\' to \'blue\'') list1[3] = 'blue' print('') print ('show 4th element: ' + str(list1[3])) print('') print('') print('add new element \'orange\' at the end:') list1.append('orange') print('') print('list1: ' + str(list1)) print('') print('') print('insert new element \'17\'at the beginning:') list1.insert(0,17) print('') print('list1: ' + str(list1)) print('') print('') print('delete element with name \'green\':') list1.remove('green') print('') print('list1: ' + str(list1)) print('') print('') # NOTE#4: if a list contains multiple elements with the same value then 'remove' only removes the first matching element print('delete the third element:') list1.pop(2) print('') print('list1: ' + str(list1)) print('') print('') # NOTE#5: use 'pop()' to delete the last element </pre> ===Example #2 (nested lists)=== <pre> # # # python list examples # # #2 - nested lists list2 = ['joe', 186, ['swimming', 'running'], [1983,2001,2018], 5, 2] print('list2: ' + str(list2) ) for x in list2: print(x) print('') print('') print('iterate over the third element (index 2)') for x in list2[2]: print(x) print('') print('') print('show the length of the list') print('list2: ' + str(list2) ) print('length: ' + str(len(list2)) + ' (counting nested lists as 1)' ) print('') print('') print('show which elements are lists:') for x in list2: if isinstance(x, list): print(str(x) + ' is a list') else: print(str(x) + ' is not a list') print('') print('') print('list2: ' + str(list2) ) print('add the element \'walking\' to the list at index 2:') list2[2].append('walking') print('list2: ' + str(list2) ) print('') print('') print('list2: ' + str(list2) ) print('remove the first element from the list at index 3:') list2[3].pop(0) print('list2: ' + str(list2) ) print('') print('') </pre> ===Example #3 (bigger nested list)=== <pre> # # # python list examples # # #3 - bigger nested list list3 = [[110.3, 111.5,110.1, 110.2],[110.2,112.7,109.4,111.6],[111.6,109.3,110.8,111.5]] print('list3: ' + str(list3) ) print('') print('print each nested list:') for x in list3: print(x) print('') print('') print('only show the second and third element of each nested list') for x in list3: print(x[1], x[2]) print('') print('') print('print the index position and the first element of each nested list') for (i,x) in enumerate(list3): print(i, x[0]) print('') print('') </pre> ===Example #4 (list containing a dictionary)=== <pre> # # # python list examples # # #4 - list containing a dictionary list4 = [{'symbol': 'ETHBTC', 'price': '0.03014900'}, {'symbol': 'LTCBTC', 'price': '0.00413500'}] print('list4: ' + str(list4) ) print('') print('print each nested dictionary:') for x in list4: print(x) print('') print('') # NOTE: below is an example of parsing a dictionary, which is not a list. # See examples for dictionaries for more details # print('iterate through each dictionary') for x in list4: marketname = x['symbol'] price = x['price'] print('market name: ' + str(marketname)) print('price: ' + str(price)) print('') print('') print('') </pre> 204e279d43dc13fbe10d735a810ff1e008e17e9f Resize Root Filesystem 0 266 3496 3495 2021-01-20T09:21:35Z Admin 1 wikitext text/x-wiki This procedure details how to copy the current filesystem to a new disk. This is a preferred scenario when: *the current root filesystem is becoming too small *you wish to shrink the existing root filesystem (think vm's) Steps to achive the copy are: * create or attach a new disk * create a root (and swap partition) on the disk (fdisk /dev/...) * format the disk with EXT2 * mount the disk to a directory on the live system * copy all files to the new disk * copy the special device files (?) * chroot into the new disk * install the bootloader to the MBR of the new disk Copy command: <pre> (cd / ; tar -cf - . --one-file-system) | (cd /mnt/ ; tar xvfpB -) </pre> Find out the new disk's UUID: <pre> ls -l /dev/disk/by-uuid/ </pre> * Update the new UUID in /etc/fstab * Update the new UUID in /boot/grub/grub.cfg Install bootloader: There are (as far as I know of) three ways of installing GRUB onto the new disk. 1 * After copying all files, remove the old drive and boot off a live Linux CD (e.g. Knoppix) (the idea here is that hd0 is the new drive and issuing the grub-install command will simply install on hd0. 2 * Swap the drives (master becomes slave, slave becomes master) and in the BIOS designate to boot of the second disk. (again, grub will install on hd0 which is the new disk) 3 * with the new disk attached as /dev/sdb, instruct GRUB to install there but to refer to it as /dev/sda (or hd0 as we want). (my preference) Method 1 and 2 http://www.linuxjournal.com/content/copy-your-linux-install-different-partition-or-drive Method 3 (with the new disk (/dev/sdb) still mounted at /mnt/) <pre> grub-install -d /mnt /dev/sdb </pre> * shutdown * take out old disk, and replace with the new disk as the primary boot disk * start the machine GRUB v1 only: When you're back in the O/S update the menu.lst to make sure the correct boot device (e.g. /dev/sda) is used. <pre> grub-install /dev/sda update-grub </pre> * reboot and all should be fine ===Resize Filesystem in an image=== So now you have a dd image of your disk and found out that the device you wish to restore it to is smaller in size... All good, what we do next is to resize the filesystem inside the dd image. Just to be sure we understand the terminology: * a block device is the physical capacity of a storage device (e.g. an 8GB Flash drive) * a partition is a logical storage container that is created on the block device. A block device can hold multiple partitions. * a filesystem is a logical arrangement of data that is used by an operating system to save and read files. A partition usually holds only one filesystem. If we want to make a larger partition fit on a smaller partition we need to make sure that the used space inside the larger partition doesn't exceed the size of the smaller partition. Once we know this, the process is relatively simple: * attach a loop device to the disk-image (using losetup) * run a filesystem-check on the partition we wish to resize (using e2fsck) * shrink the filesystem to the desired size (using resize2fs) * shrink the partition to a size that is (slightly) larger than the filesystem After this, we can just write the disk image to the (smaller) block device without running into disk space issues The Process: Attach a loop device to the various partitions inside the disk image: <pre> losetup --find --partscan imagefile.dd </pre> Reveal the partition devices that were assigned: <pre> root@pi:/data# cat /proc/partitions major minor #blocks name 8 0 976762584 sda 8 1 53938206 sda1 8 2 51210240 sda2 8 3 48828416 sda3 8 4 822784000 sda4 11 0 1048575 sr0 7 0 7822336 loop0 <--- imagefile.dd 259 0 42811 loop0p1 <--- partition 1 inside imagefile.dd 259 1 7281664 loop0p2 <--- partition 2 inside imagefile.dd </pre> Run a filesystem check: <pre> root@pi:/data# e2fsck /dev/loop0p2 e2fsck 1.44.5 (15-Dec-2018) /dev/loop0p2 contains a file system with errors, check forced. Pass 1: Checking inodes, blocks, and sizes Inode 391641, i_blocks is 16, should be 8. Fix<y>? yes Inode 391642, i_blocks is 16, should be 8. Fix<y>? yes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Block bitmap differences: +(1393664--1393838) -(1394673--1394890) -(1612165--1612167) -1612891 -1612982 -(1615784--1615789) -1622693 -1622836 -1622855 -(1626336--1626342) -(1638720--1638734) -(1638841--1638851) -(1639248--1639258) -1665037 -1666053 -(1668096--1668097) Fix<y>? yes Free blocks count wrong for group #49 (4771, counted=4801). Fix<y>? yes Free blocks count wrong for group #50 (14121, counted=14151). Fix<y>? yes Free blocks count wrong (576554, counted=598442). Fix<y>? yes /dev/loop0p2: ***** FILE SYSTEM WAS MODIFIED ***** /dev/loop0p2: 262820/441728 files (0.3% non-contiguous), 1221974/1820416 blocks </pre> (so a few errors there, but you may not see any errors) Shrink the filesystem to the desired size: <pre> root@pi:/data# resize2fs /dev/loop0p2 7000M resize2fs 1.44.5 (15-Dec-2018) Resizing the filesystem on /dev/loop0p2 to 1792000 (4k) blocks. The filesystem on /dev/loop0p2 is now 1792000 (4k) blocks long. </pre> The filesystem should now be small enough to fit on our target block device. Since we no longer need to access the partitions inside the disk-image we can disconnect the loop devices from the disk image: <pre> losetup --detach /dev/loop0 </pre> Next, we shrink the partition to a size that is (slightly) larger than the filesystem we just shrunk. First, inspect the target block device and determine our start sector: <pre> root@pi:/data# fdisk -l /dev/sdb Disk /dev/sdb: 7.5 GiB, 8010072064 bytes, 15644672 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xed429e5a Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 93813 85622 41.8M c W95 FAT32 (LBA) </pre> Orginally, the start sector of the 2nd partition began at 94208 so we'll leave it at that. Then we need to calculate the end sector. The resize2fs command used a value of 7000M. In Bytes, this is: 7,000 * 1024 (k) * 1024 (B) = 7340032000 Bytes In 512-Byte blocks, this is: 7340032000 / 512 = 14336000 So the End-sector where this 7,000MB block needs to end is 94208 + 14336000 = 14430208 Let's add one more 512Byte block to give the filesystem enough room to fit in: 14430209 Then we can simply delete the partition from the block device and re-add it with the smaller size: <pre> root@pi:/data# cat /proc/partitions major minor #blocks name 8 0 976762584 sda <---- the disk of the system that we're currently working on 8 1 53938206 sda1 8 2 51210240 sda2 8 3 48828416 sda3 8 4 822784000 sda4 11 0 1048575 sr0 7 0 7822336 loop0 <---- the disk-image dd file 259 0 42811 loop0p1 259 1 7281664 loop0p2 <---- the partition containing the filesystem we have just shrunk 8 16 7822336 sdb <---- the target block device (an 8GB Flash drive) 8 17 42811 sdb1 <---- the first partition (we'd like to keep as-is) root@pi:/data# fdisk /dev/sdb <---- running fdisk on the target block device Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n <------ create a new partition (partition 2 was already gone) Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): 2 First sector (2048-15644671, default 2048): 94208 <----- where the original 2nd partition started Last sector, +/-sectors or +/-size{K,M,G,T,P} (94208-15644671, default 15644671): 14430209 <---- our calculated end sector Created a new partition 2 of type 'Linux' and of size 6.9 GiB. Partition #2 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o: y The signature will be removed by a write command. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@pi:/data# </pre> One final check: <pre> root@pi:/data# fdisk -l /dev/sdb Disk /dev/sdb: 7.5 GiB, 8010072064 bytes, 15644672 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xed429e5a Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 93813 85622 41.8M c W95 FAT32 (LBA) /dev/sdb2 94208 14430209 14336002 6.9G 83 Linux root@pi:/data# </pre> Now we have created a smaller partition on the target block device that is just large enough to hold the smaller filesystem. We can now write the disk-image dd file to the block device without running into disk space issues. <pre> dd if=diskimage.dd of=/dev/sdb bs=1M </pre> 83e070aa017c134efbf047497c836a8829293530 File:Kiwisdr-arstechnica-2021-07-15.png 6 847 3507 2021-07-21T00:36:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Main Page 0 1 3511 3510 2021-07-21T00:38:00Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! [[File:Free-julian.jpeg|right|link=File:Free-julian.jpeg]] For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] Click here for the KiwiSDR waterfall page: https://www.marcelpost.com:8073 [[File:Kiwisdr-waterfall.jpg|left|link=https://www.marcelpost.com:8073]] List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ IMPORTANT SECURITY MESSAGE FOR KIWISDR OWNERS: [[File:Kiwisdr-arstechnica-2021-07-15.png|left|link=https://arstechnica.com/gadgets/2021/07/for-years-a-backdoor-in-popular-kiwisdr-product-gave-root-to-project-developer/]] https://arstechnica.com/gadgets/2021/07/for-years-a-backdoor-in-popular-kiwisdr-product-gave-root-to-project-developer/ b97441091edb47b8742e21bd5560001bf71b3441 Movies 0 5 3512 3102 2021-08-17T03:51:48Z Admin 1 wikitext text/x-wiki ==Here is a selection of movies I can recommend and suggestions from others== ===Movies I can recommend:=== * Cloud Atlas (2012) * Inception (2010) * District 9 (2009) * Memento (2000) * The Matrix (1999) * Lock stock and two smoking barrels (1998) * The Big Lebowski (1998) * Fargo (1996) * Pulp Fiction (1994) * Resevoir Dogs (1992) * Down by Law (1986) * Amadeus (1984) * Blade Runner (1982) * The Thing (1982) * Das Boot (1981) * Alien (1979) * Halloween (1978) * Monty Python and the Quest for the Holy Grail (1975) * The Exorcist (1973) * 2001: A Space Odyssey (1968) ===Movies suggested by others:=== * arrival * Band * office killer * karakter * de aanslag * reykjavik rotterdam * code 46 * aaltra * thunderbolt and lightfoot * kannibal the musical * burlesque * idiocracy * meet the feebles * the magic pudding * revolver * steam punk * city of lost children * amores perros * trancendent man * thank you for smoking * the cove * roger dodger * the day after tomorrow * high fidelity * point blank * Salt and Fire (2016) * Intersect (2020) ==Silly Movie things== What I cannot for the life of me understand is that in this day and age in movies: [[File:Plane-landing.jpeg]] * the sound of the wheels touching the tarmac of an airplane landing is instant. Sound travels slower than light. (same goes for lightning strikes) [[File:Car-on-dirt-road.jpeg]] * tyres make squealing sounds on a dirt road. There is not enough friction to make the rubber sound like that. [[File:Explosions-in-space.jpeg]] * space ship engines and explosions observed from outer space make sound. They do not because sound does not travel well in a vacuum. [[File:Monitor-text-beeps.jpeg]] * text on a computer screen makes noise when it is printed. It does not. [[File:Satellite-in-orbit.jpeg]] * when satellites are shown in an orbit around the earth the sound of 1950's Telex RTTY is heard. Or Morse code. Or both! [[File:Knife-stabbing.jpeg]] * when someone is stabbed with a knife it makes a noise as if cutting through plated steel. A knife through meat is very silent. Try it. [[File:Bomb-countdown.jpeg]] * countdown timers are always too slow. Do you own counting and you can sometimes find movie-seconds that last 10x as long. [[File:Camera-on-a-ship.jpeg]] * movies shot on a boat often have the camera moving slowly clockwise and counterclockwise as if the boat is bobbing. I'm not even gonna explain this. [[File:Binoculars.jpg]] * the view through binoculars is like a figure-8 on it's side. This is impossible, it's round! [[File:Explosion.jpeg]] * they tap the camera when there's an earthquake or an explosion, but no-one in the picture moves. [[File:Space-helmet-lights.jpg]] * space helmets with lights on the inside. Why would blinding yourself with light up-close be practical? [[File:Silly-image-enhancement.jpg]] * image enhancement absurdity. [[File:Rifle-magazine.jpg]] * semi-automatic machine gun cartridge capacity absurdity (common cartridges only hold 30 rounds) b2bff54b8a89ffca0aed1b71ee434abcb4dbed54 Ffmpeg-examples 0 837 3513 3431 2021-08-17T07:29:32Z Admin 1 wikitext text/x-wiki Bunch of ffmpeg examples on one page <pre> ffmpeg -y -i INFILE.mp4 -vcodec mpeg4 -vb 200k -acodec libvo_aacenc -ac 1 -ab 94000 -ar 16000 OUTFILE.mp4 ffmpeg -y -i INFILE.mp4 -c:v libx264 -crf 23 -vb 200k -c:a copy OUTFILE.mp4 truncate without re-encoding ffmpeg -y -i INFILE.mpg -ss mm:ss -t mm:ss -c copy OUTFILE.mp4 convert jpg images to video: ffmpeg -r 1/0.1 -f concat -i filelist.txt -r 25 -c:v libx264 -pix_fmt yuv420p -y OUTFILE.mp4 (where filelist.txt contains the list of image file names, e.g. img001.jpg, img002.jpg) or ffmpeg -framerate 10 -pattern_type glob -i '*.jpg' -s 1280x720 -c:v libx264 -crf 23 out.avi Video bitrate: Rule of thumb: divide your target size (in bits) by the video length (in seconds) Example 1: for a 6 second video to be 10MBytes, use (10,000,000 / 6) = 1.6M -vb 1600k Example 2: for a 30 minute video to be 400MB, use (400,000,000 / 1,800) = 222,222 = 222k -vb 222k Note: lower CRF (Constant Rate Factor) equals higher quality (and larger files) (max bitrate over wifi around 1Mbps) Audio codecs and options: -acodec libvo_aacenc -ac 1 -ab 94000 -ar 16000 -acodec aac -ac 2 -ab 128k -acodec copy -an Time selection: -ss = start-time offset (0 = begin, 5:00 = after 5 minutes) -t = duration (1:00 = one minute, 1:45:00 = 1 hour and 45 minutes) -ss 2:23 -ss 1:49 -t 1:58:02 -t 2:15:06 for example, to remove the first 10 seconds of a 1.5 hour movie: ffmpeg -i infile.mp4 -ss 0:10 -t 1:30:00 -c copy outfile.mp4 Screen resolution: -s 1280x720 Resize and Crop options: Resize: -vf scale=iw*2:ih -vf "setsar=1/0.75" // Set the pixel sample aspect ratio. -vf "setdar=64:27" // Set the frame display aspect ratio. Scale by percentage: -vf scale=iw/2:-1 Crop: -vf crop=<width>:<height>:<offset from left>:<offset from top> -vf crop=680:440:300:50 example: Remove black horizontal bars at the top and bottom. The original video is 652x480 (width x height) but black bars only leave a useful video with an area of 652x326 pixels. Since the top and bottom bars are each 77 pixels in height, we offset the area by 77 pixels from the top. ffmpeg -y -i inputfile.mp4 -vf crop=652:326:0:77 outfile.mp4 Joining multiple videos: - create a text file containing a list of the videos you wish to join Syntax: file <filename> Example: file /path/to/file/video1.mp4 file /path/to/file/video2.mp4 file /path/to/file/video3.mp4 - join (concatenate) command: ffmpeg -f concat -i myvideolist.txt -c copy allvideos.mp4 if you need to join multiple videos with differing bitrates/fps then you will need to re-encode them all to the same format first. Something like: ffmpeg -i video1.mp4 -filter:v fps=30 -vcodec libx264 -c:a copy video1_reencoded.mp4 keyframes: -force_key_frames 1 </pre> a0f114e36d4f1417d04a3e0ec552106b5503832d LTSpice 0 848 3515 2021-09-25T01:36:00Z Admin 1 Created page with "LTSpice is a free electronics simulation program from Analog Devices (originally made by Linear Technologies). It can be downloaded from their website: https://www.analog.co..." wikitext text/x-wiki LTSpice is a free electronics simulation program from Analog Devices (originally made by Linear Technologies). It can be downloaded from their website: https://www.analog.com/en/design-center/design-tools-and-calculators.html If the component you want to use in your circuit is not available you can import one. LTSpice models are available in two types: * Model (.mod, model) - these are simple components such as transistors and diodes * SubCircuit (.sub, subckt) - these are more complex parts made up of simpler Spice parts (diodes, transistors, resistors etc) comp (component) sub () lib (library) inc (include) sym (symbol) 447c4f4cfb9ae77023b0164a68c770d02a5aed85 Mcu 0126-iambic-keyer 0 664 3519 3518 2021-10-11T09:50:26Z Admin 1 wikitext text/x-wiki Sending Morse Code is a hobby that is still alive and well. This board uses an ATtiny45 or ATtiny85 microcontroller and can be used with an iambic keyer to send morse code. The code fits in a 4k ATtiny45 or the bigger 8k ATtiny85 Program Memory Flash. I got the idea and code from Jack Welch: http://blog.templaro.com/?p=1315 (code here: https://github.com/dhakajack/jackyack/), who got his idea from Jan Lategahn, DK3LJ who has the original sources here: http://yack.sourceforge.net/ Brief overview of the main features: * keying speed settable from 5 to 50wpm * toggle paddle swap (if dit and dah paddles are wired incorrectly) * chip-generated side tone to drive a small piezo speaker (adjustable pitch from 400-1500Hz or turned off completely) * output TX switch-to-ground using low-power 2N7000 N-Channel FET (toggle inverted operation) * send from 2x pre-recorded memory banks of 100 characters each * 20-second tune-up constant tone * supports Iambic-A, Iambic-B and Ultimatic modes * random callsign trainer * automatic Beacon mode The ATtiny microcontroller runs internally on 8MHz, but has the CLKDIV8 flag set, which makes the program effectively run at 1MHz. These clock settings are factory default for a newly-purchased (empty) ATtiny85 chip so you don't need to set any additional Fuses when programming the code into the microcontroller. ===Version 1=== Initially I wanted to make the keyer on a small board with just through-hole components. [[File:0126-iambic-keyer-pcb-built side.jpg|none|thumb|300px|Iambic Keyer built and ready to go]] [[File:0126-iambic-keyer-oshpark.jpg]] Ready to order from OSH Park: https://oshpark.com/shared_projects/EWy79eAF Parts list: * R1, R2: 10k (1/4W) * C1: 100nF (MKT) * C2, C3, C4: 10nF (MKT) * U1: ATtiny45 or ATtiny85 (pre-programmed, internal oscillator @ 1MHz) * U2: 78L05 * Q1: 2N7000 * header pins, .1" pitch (optional) Gerbers: [[File:0126 Iambic Keyer gerbers.zip]] Arduino Source code: [[File:0126 iambic keyer.zip]] * Note: although the source code is in the Arduino .ino format, it is targeted for the ATtiny microcontroller. In order to program this code, you need to turn your Arduino (e.g. Dueamilanove or Uno) into an In-Circuit Serial Programmer (link: https://create.arduino.cc/projecthub/arjun/programming-attiny85-with-arduino-uno-afb829). Schematic: [[File:DipTrace Schematic - 0126 iambic keyer.png|none|thumb|300px|Iambic keyer schematic]] ===Version 2=== Once I sorted out some minor issues with the code and was confident that this was indeed a neat little project, I decided to try and fit it in a small plastic enclosure. The enclosure I chose had small internal rails, between which a circuit board can be held. I was hoping that the enclosure would be big enough inside to also hold a 9V battery, but this turned out to be a bit of a challenge. What I ended up doing was to make a pair of tabs at one end of the circuit board so it could hold the 9V battery in place. The result is what you see below. When the board is received, the end-tabs need to be snapped off and filed flush for a snug fit in the enclosure. The tabs are then soldered at 90 degree angles. Make sure to leave enough space around the battery for some additional insulation tape as the metal body of a 9V battery is NOT ground(!). I tried various small 9V snap-on tabs, but even the smallest ones are still too thick to fit everything inside the box. Therefore the only way this will work is to solder the power leads directly to the battery. Not ideal, but this way it all just fits. <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-front.jpg|none|thumb|300px|Iambic keyer fully assembled - front view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-back.jpg|none|thumb|300px|Iambic keyer fully assembled - back view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-inside-enclosure.jpg|none|thumb|300px|Iambic keyer - inside the enclosure]]</li> </ul></div> <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom.jpg|none|thumb|300px|PCB 0126 with the tabs still attached]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom-with-tabs.jpg|none|thumb|300px|PCB 0126 with tabs soldered on the back of the board]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 top.jpg|none|thumb|300px|Iambic keyer PCB top view]]</li> </ul></div> (new schematic, not yet posted) (gerber files, not yet posted) (improved source code, not yet posted) BOM <code> 11x male header pins 0.50 eBay 6x female header pins receptacle 0.50 eBay 1x DIP8 ATTiny85 2.00 eBay 2x 1206 10nF cer cap 0.02 669-8410 RS 1x 1206 100nF cer cap 0.02 669-8408 RS 2x 1206 1uF cer cap 0.02 669-8414 RS 2x 1206 10k res 0.01 117-391 RS 1x 1206 BSS138 N-Ch FET 0.24 671-0324 RS 1x SOT223-3 MCP1703-502E/DB LDO 0.91 669-4890 RS 1x Piezo buzzer 3500Hz 0.78 457-011 RS 1x DIP8 IC Socket 0.38 PI6500 Jaycar 1x 1m 16-Way IDC ribbon cable 1.85 WM4502 Jaycar 1x spdt sub-miniature toggle switch 2.95 ST0300 Jaycar 1x small black SPST N/O momentary 3.95 SP0700 Jaycar 1x DC Power 2.5mm Bulkhead connector 2.95 PS0524 Jaycar 1x enclosure 130x68x44mm 3.95 HB6013 Jaycar 2x 3.5mm stereo chassis socket 1.35 PS0132 Jaycar 1x Circuit Board 0126 Iambic Keyer 6.70 OSH Park ------ $29.08 (AUD) </code> Here is a typical Morse paddle that can be used with this keyer. [[File:Ame dcp paddle.jpg|none|thumb|200px|AME DCP Paddle]] http://americanmorse.com/dcp.htm Getting started. So you've soldered all the components, connected all the hardware and it's mounted in a box. Now what do you do? The keyer has a few modes of operation. It can only be in one of these modes: * iambic keyer mode * Menu mode * Callsign training mode When the device is first powered up it will output '73' (on the internal speaker only) and start in iambic keyer mode, ready for paddle input. If a paddle is connected you can send dits and dahs by tapping the left or the right paddle. In the menu you can configure common options such as: * swapping the left and right paddle * setting the internal speaker on or off during iambic keyer mode * enabling or disabling the switched output (to key the radio) * swap the switched output (key to GND or key to 5V) * the tone of the CW from the internal speaker * the speed of the CW To enter the menu, press the command button once. It will send '?' ( . . - - . . ) to confirm it is in menu mode. If no paddle activity is sensed within 5 seconds it will time out, send 'SK' ( . . . - . - ) and return back into Iambic keyer mode. While in menu mode, use the paddle to key in the letter of a corresponding menu option to activate it. The full list of options is shown below. The following list of menu options is available: <pre> @section usage Usage After reset in default mode, the keyer operates as regular IAMBIC keyer in IAMBIC A at 15 WPM (words per minute = 60 CPM), with 700 Hz side tone. By default, the transmitter keying signal is positive. @subsection speed Speed Change Speed can be changed by pressing and holding the command key while operating the DIT and DAH paddles. DIT reduces speed while DAH increases speed. The keyer plays an alternating sequence of dit and dah while changing speed without keying the transmitter. @subsection cmode Command mode Pressing the command button without changing speed will switch the keyer into command mode. This will be confirmed with the '?' character. Another press of the same button takes the keyer back into regular keyer mode and will be confirmed by the 'SK' prosign. During command mode the transceiver is never keyed and sidetone is always activated. Further functions can be accessed by keying one-letter commands as listed below. @subsubsection Version V - Version The keyer responds with the current keyer software version number @subsubsection pitch P - Pitch Allows modifying the sidetone pitch to a higher or lower level. A sequence of dits will be played and the pitch can be modified with the dit and dah paddles. If no paddle is touched for 5 seconds, the acknowledgment signal 'R' is sounded and the mode terminates, leaving the user in command mode. @subsubsection reset R - Reset All settings are returned to their default values except for the stored messages in the message buffers. Restored settings include speed and pitch, Paddle Swap, TX level inversion, sidetone and TX keyer settings. @subsubsection tune U - Tune mode The transceiver is keyed for a duration of 20 seconds for tuning purposes. Tuning mode is aborted once either DIT or DAH paddles are touched or the control key is pressed. @subsubsection ia A - IAMBIC A Keyer sets IAMBIC A as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ib B - IAMBIC B Keyer sets IAMBIC B as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ultimatic L - Ultimatic Sets the keyer into ULTIMATIC mode. In Ultimatic mode always the last paddle to be touched is repeated indefinitely when paddles are squeezed @subsubsection dahprio D - DAH priority mode. In squeezed state a sequence of DAHs is sent. Some of the first generation keyers exhibited this behaviour so the chip can simulate that @subsubsection swap X - Paddle swapping DIT and DAH paddles are swapped. An 'R' is sounded to acknowledge the request. @subsubsection side S - Sidetone toggle The built-in sidetone generator setting is toggled (ON -> OFF or OFF -> ON). NOTE: This setting is only of relevance for regular keying mode. Sidetone is always on in command mode. An 'R' is sounded to acknowledge the request. @subsubsection txtog K - TX Keying toggle Toggles the setting of the TX keyer output. In default state the keyer switches the output line when it is in keyer mode. Toggling this setting enables or disables that function. NOTE: Keying is always off in Command mode. An 'R' is sounded to acknowledge the request. @subsubsection farnsworth Z - Set Farnsworth pause Allows setting of an extended inter-character pause in all sending modes, which makes fast keying easier to understand. Note that this of course only influences RECEPTION, not TRANSMISSION. If you desire farnsworth mode in transmission, please manually pause during characters. @subsubsection lvtog I - TX level inverter toggle This function toggles wether the "active" level on the keyer output is VCC or GND. The default is VCC. This setting is dependent on the attached keying circuit. An 'R' is sounded to acknowledge the request. @subsubsection query W - Query current WPM speed Keyer responds with current keying speed in WPM. @subsubsection msgrec 1 and 2 - Record internal messages 1 or 2 The keyer immediately responds with "1" or "2" after which a message up to 100 characters can be keyed at current WPM speed. After 5 seconds of inactivity the message is played back once and then stored in EEPROM. Choosing "1" or "2" but not keying a new message deletes the chosen message buffer content. @subsubsection msgplay E and T - Play back internal messages 1 or 2 The stored messages 1 or 2 are played back with keying enabled (if configured). A press of the command key immediately returns the keyer to keyer mode so a QSO can be started. @subsubsection beacon N - Automatic Beacon The keyer responds with 'N' after which a number between 0 and 9999 can be keyed. After a 5 second timeout the keyer responds by repeating the number and 'R'. Once the keyer returns to keyer mode, the content of message buffer 2 is repeated in intervals of n seconds. The setting is preserved in EEPROM so the chip can be used as a fox hunt keyer. Returning to command mode and entering an interval of 0 (or none at all) stops beacon mode. @subsubsection lock 0 - Lock configuration The 0 command locks or unlocks the main configuration items but not speed, pitch and playback functions. @subsubsection trainer C - Callsign trainer The keyer plays a generated callsign (sidetone only) and the user must repeat it. If it was repeated correctly, 'R' is played and the next callsign is given. If a mistake was sensed, the error prosign (8 dits) is sounded and the current callsign is repeated again for the user to try once more. If nothing is keyed for 10 seconds, the keyer returns to command mode. </pre> 1ad3ed3fac59605b9eb0bee2c9c4929a1dece275 File:Sun-Hemmi P280-P281.pdf 6 849 3520 2021-10-22T22:55:36Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Faber-Castell 1970 Catalog.pdf 6 850 3522 2021-10-22T23:03:40Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:M138 Dieterich-Post Catalog 1968.pdf 6 851 3524 2021-10-22T23:10:01Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Sliderules 0 541 3525 3523 2021-10-22T23:10:29Z Admin 1 wikitext text/x-wiki Some of the slide rules I have gathered over the years: ==Sun Hemmi P280== Low cost two color simplex rule. Plastic body rule with unusual blue tinted slide and two color scales. Basic student rule with trig scales, the T, ST and S scales have complimentary angles marked in red, and the scales are all self-documenting on the right hand side. Reversible slide has 3 log log scales. Unbreakable plastic cursor. [[File:Sun-hemmi-p280 front.jpg|400px|thumb|none|Sun Hemmi P280 (front)]] [[File:Sun-hemmi-p280 back.jpg|400px|thumb|none|Sun Hemmi P280 (back)]] Manual: [[File:Sun-Hemmi P280-P281.pdf]] * body: plastic * cursor: plastic * length: 27cm * Scales: 13 * Front scale: T, K, A, [ B, CI, C, ] D, L, S, ST * Slide Reverse: [ LL1, LL2, LL3 ] * country of origin: Japan * year of manufacture: October 1972 [Date Code: WJ] ==Sun Hemmi Teledyne 44CA-600 Versalog II== About June, 1973. The last Post Versalog II is made. The first Teledyne-Post Versalog II (new model number 44CA-600) appeared a little before then, in June 1972. For a long time, the last T-P Versalog we knew of had the date code WH (August 1972), but a recently acquired Versalog 44CA-600 example has surfaced with the date code XF, indicating June 1973 production. [[File:Sun-hemmi-versalog-II front.jpg|400px|thumb|none|Sun Hemmi Versalog II (front)]] [[File:Sun-hemmi-versalog-II back.jpg|400px|thumb|none|Sun Hemmi Versalog II (back)]] * body: laminated bamboo * cursor: metal/plastic * length: 27cm * Scales: 24 * Front: logX, LL/1, LL/2, LL/3 [ T/T, SecT/ST, Cos/S, C ] D, LL3, LL2, LL1 * Back Scale: LL/00, K, A, DF [ CF, CIF, CI, C ] D, R1, R2, LL0 * country of origin: Japan * year of manufacture: August 1972 [Date Code: WH] ==Faber Castell 52/82== Plastic body duplex rule with trademark green accent stripes on fundamental scales, and multi-line cursor. Rule face is self-documenting, with scale functions listed, as well as scale letters. [[File:Faber-Castell-52-82 front.jpg|400px|thumb|none|Faber-Castell 52/82 (front)]] [[File:Faber-Castell-52-82 back.jpg|400px|thumb|none|Faber-Castell 52/82 (back)]] * body: plastic * cursor: plastic * length: 10" (25.4)cm * Scales: 22 * Front scales: L K A [ B BI CI C ] D LL1 LL2 LL3 * Back scales: T T2 DF [ CF CIF S' C ] D S ST P * Country of origin: Germany * year of manufacture: August 1961 [Date Code: 861] ==Faber Castell 67/87== Plastic body simplex 15cm rule with 4-line cursor, two color (red/black) scale markings, and inch side ruler, reversible slide has S, ST, and T scales. Rule is self documenting on right hand side for all scales. [[File:Faber-castell-67-87 front.jpg|400px|thumb|none|Faber-Castell 67/87 (front)]] [[File:Faber-Castell-67-87 back.jpg|400px|thumb|none|Faber-Castell 67/87 (back)]] Catalog in which this slide rule appears: [[File:Faber-Castell 1970 Catalog.pdf]] * body: plastic * cursor: plastic * length: 15cm * Scales: 10 + ruler * Front scales: K, A [ B, Ci, C ] D, L * Back ruler scales: S, ST, T * Country of origin: Germany * year of manufacture: April 1959 [Date Code: 459] ==Pickett N1006-ES== Pickett 5" Trigonometry Duplex Rule. This is the "Eye Saver" yellow version of this rule, [[File:Pickett-n1006-es front.jpg|400px|thumb|none|Pickett N1006-ES (front)]] [[File:Pickett-n1006-es back.jpg|400px|thumb|none|Pickett N1006-ES (back)]] Catalog in which this sliderule appears: [[File:M138 Dieterich-Post Catalog 1968.pdf]] * body: aluminium * cursor: nylon/plastic with metal screws * length: 5" (12.7cm) * Scales: 17 * Front scales: K, A [B, ST, T, S, C] D, DI * Back scales: Ln, DF [CF, CIF, CI, C] D, L * country of origin: USA * year of manufacture: 1959 ==Pickett N600-ES== Pickett 5" Trigonometry Duplex Rule. This is the "Eye Saver" yellow version of this rule, [[File:Pickett-N600-es front.jpg|400px|thumb|none|Pickett N600-ES (front)]] [[File:Pickett-N600-es back.jpg|400px|thumb|none|Pickett N600-ES (back)]] Catalog in which this sliderule appears: [[File:M138 Dieterich-Post Catalog 1968.pdf]] * body: aluminium * cursor: nylon/plastic with metal screws * length: 5" (12.7cm) * Scales: 19 * Front scales: LL1, A [B, ST, T, S, C] D, DI, K * Back scales: LL2, DF [CF, Ln, L, CI, C] D, LL3 * country of origin: USA * year of manufacture: 1962-1964 ==The Scales== After seeing so many slide rules it may appear confusing to see so many scales close together one one slide rule. Here is a list of the most common slide rule scales. {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Letter(s)</b> |style="background-color:#f2f2f2;"|<b>Description</b> |style="background-color:#f2f2f2;"|<b>Applies to</b> |style="background-color:#f2f2f2;"|<b>Colour</b> |style="background-color:#f2f2f2;"|<b>Orientation</b> |style="background-color:#f2f2f2;"|<b>Comments</b> |- |C |Single Logarithmic, 1 Decade (1-10) |Multiplication, division |style="color:black"|Black |left to right |Usually found on slide |- |D |Single Logarithmic, 1 Decade (1-10) |Multiplication, division |style="color:black"|Black |left to right |Usually found on body |- |A |Double Logarithmic, 2 Decades (1-10-100) |Powers of 2 and Square Roots |style="color:black"|Black |left to right |Usually found on body |- |B |Double Logarithmic, 2 Decades (1-10-100) |Powers of 2 and Square Roots |style="color:black"|Black |left to right |Usually found on body |- |K |Triple Logarithmic, 3 Decades (1-10-100-1000) |Powers of three and Cube Roots |style="color:black"|Black |left to right | |- |L |linear scale (0-1) |Mantissa for Common (base 10) Logs |style="color:black"|Black |left to right | |- |S |Sine scale |Sines between 5.7&deg; and 90&deg; |style="color:black"|Black |left to right | |- |<span style="color:black">S</span><span style="color:red">(cos)</span> |Cosine scale |Cosines between 5.7&deg; and 90&deg; |<span style="color:red">Red</span> |right to left, combined with S scale | |- |T |Tangent scale |Tangents between 5.7&deg; and 90&deg; |Black |left to right | |- |ST |Single Decade 1-10, basic scale folded at 57.3 |Sines, Tangents between 0.6&deg; and 5.7&deg; |style="color:black"|Black |left to right | |- |Ci |Inverted Single Decade 1-10 | |<span style="color:red">Red</span> |right to left | |- |Di |Inverted Single Decade 1-10 | |<span style="color:red">Red</span> |right to left | |- |Cf |Folded Single Decade 1-10 | |style="color:black"|Black |left to right | |- |Df |Folded Single Decade 1-10 | |style="color:black"|Black |left to right | |- |P |Pythagorean Scale | |style="color:black"|Black |left to right | |- |LL1 |Log-Log scale 1 |Raising numbers to arbitrary powers |style="color:black"|Black |left to right | |- |LL2 |Log-Log scale 2 |Raising numbers to arbitrary powers |style="color:black"|Black |left to right | |- |LL3 |Log-Log scale 3 |Raising numbers to arbitrary powers |style="color:black"|Black |left to right | |- |} ==Gauge Points== Often used numbers such as Pi, e, conversions and other ratios can be found as Gauge Points on some scales. Here is a list of common gauge points. {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>Symbol</b> |style="background-color:#f2f2f2;"|<b>Value</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Applicable to</b> |style="background-color:#f2f2f2;"|<b>Scales</b> |- |g |0.01745 |sin(1&deg;) | |C,D |- |M |0.31831 |1/&pi; |ratio of diameter to circumference |A,B |- |&#124; |0.78648 |&pi;/4 |Area and Circumference of Circles |C,B |- |// |1.182&deg; |seconds in a radian, sin(1.1818) | |ST |- |C |1.273 |4/&pi; |Volume of a cylinder |C |- |/ |1.97&deg; |minutes in a radian, sin(1.97) | |ST |- |&#8495; |2.718281828 |Euler's Number |Natural Logs, compound interest, half-life decay |C |- |&pi; |3.141592654 |Pi |ratio of circumference to diameter |C |- |C1 |3.5683 |SQRT(40/&pi;) |volume of a cylinder | |- |R |57.299 |Reciprocal of Q |1 radian = 57.3 degrees |Ci |- |g&prime; |3437.74 |minutes in a radian |Trig functions for small angles | |- |g&prime;&prime; |206264.8 |seconds in a radian |Trig functions for small angles | |- |} 4039b170e0dac18ea1e6a204bca7a27750b28e01 File:SLA-charge-stages.jpg 6 852 3532 2021-10-24T00:25:23Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:LM317-dropout-voltage.png 6 853 3534 2021-10-24T00:47:23Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0137-SLA-charge-controller 0 783 3539 3538 2021-10-24T01:04:52Z Admin 1 wikitext text/x-wiki For me this charge controller is part of a bigger project, but since it should work fine as a stand-alone solution I thought I'd put it here for the world to see and use. I will be using the 8-pin 8-bit ATtiny84 for this design. This charge controller aims to do the following: * use battery voltage sensing to detect whether the charging circuit should be activated or not. * use a fixed charge current in combination with an LM317 to regulate charge current * set final charge voltage using a trimpot (12V - 15V) * enter sleep mode on the microcontroller to save power when the battery is charged. * signal charge state with an LED * minimal current draw when not charging (a few uA's) * input voltage range (17V - 30V) ===OPTIONALLY:=== * use a boost converter to allow charging from low input voltages (e.g. 5V from a USB port). The first version of the charge controller schematic: [[File:0137 schematic v1.0.png|thumb|none]] NOTE: the value of the charge-current resistor (right next to the LM317) in the schematic applies to R3 (shown as 20R). The final PCB has this resistor listed as R7! [[File:0137 prototype.jpg]] After breadboarding, this was the first prototype on perfboard of the SLA battery charger circuit. It incorporates a tiny boost converter to allow charging a 12V battery from much smaller voltage sources. [[File:0137 SLA-battery-charger pcb v1.0.jpg]] First PCB (v1.0) with the IRF9540 for Q1. Working fine, but some improvements can still be made. The next step will be to work out the following features: * choosing a more powerful FET to control higher charge currents ===Sizing the Charge Controller FET Q1=== N-channel FETs Q2 and Q4 are just for switching the P-channel FETs to ground, so they can be low-power 2N7000 or BS138. The FET Q3 is used to switch on the voltage-divider network to sample the battery voltage and with the two resistors in series we'll see only a few mA's running through Q3, so no worries there either. However, P-channel FET Q1 is the one that will be switching the charge current (as regulated by the LM317) to the battery. For low-power charging we can suffice with a BS250 in a TO-92 package. Although the datasheet for the BS250 rates the FET for a maximum heat dissipation of 830mW (about 55mA @ 15V), in general, a TO-92 package is only capable of dissipating a maximum power of 644mW, so the power to the battery during charging should not exceed 42mA @ 15V (taken 15V as the maximum charge voltage) (how to size the LM317 feedback resistor... link here?) This means that if we want to use a higher charge current than 42mA we will need a different FET for Q1. Most importantly, we'll need a FET in a package that can dissipate the heat better. A good upgrade for Q1 will be the IRF9540. This FET is in a TO-220 package and it can handle up to 50W. Now, this 50W rating is only if you have a big heatsink on the metal body of the FET. Without a heatsink you should not go much higher than about 1.5 Watts. If we take 1.5 Watt as our example with a non-heatsinked IRF9540, we should be able to charge the battery at (1.5 Watts / 15V = ) 100mA. A small heat sink will go a long way in keeping the FET cool(er) and allowing the circuit to charge the battery at higher rates. ===Input voltage=== The input voltage to properly charge the battery is around 17 Volts. This seems rather high for charging a 12V battery. Why is this so? When charging a discharged 12V SLA battery the voltage applied to the battery will change over time. This graph shows what's going on: [[File:SLA-charge-stages.jpg]] On the (solid line) voltage curve you can see that the starting voltage of a cell is around 2.1V. There are 6 of those cells in a 12V SLA battery, so the voltage on the terminals is (6 x 2.1V = ) 12.6V. Initially the charger will output the maximum current to the battery, this is called the Bulk Charge state. When the charging has raised the terminal voltage to 13.8V (6 x 2.3V per cell) the battery voltage is kept at 13.8V by applying less and less current, this is called the Absorption Stage. Once the current reaches a certain minimum the charging is almost completely stopped and it will just keep the battery at a specific voltage that it can comfortably sit at for extended periods of time, this is the Float state. For most 12V SLA batteries this is around 13.5 V. The little battery charger from our project isn't quite that clever. It will simply apply the maximum current to the battery until it reaches the voltage as set by the trimpot and then stop charging. It will begin charging again when the battery voltage has dropped about 1 Volt below the setpoint voltage. The trimpot allows for setting the maximum voltage between 12V and 15V so we will need to cater for the maximum voltage when determining our input voltage. At 100mA The LM317 needs at least 1.6V overhead, but this will be operating the device with no margin. A common 'headroom' figure for the LM317 is about 3V but this will be when running it at much higher current. In our design I have chosen a headroom of 2 Volts, but that means it shouldn't be used for charging with more than 250mA. So for low-power charging conditions and a headroom of 2V dropout voltage on top of 15V as a maximum charge voltage we need to provide at least a 17V input voltage. [[File:LM317-dropout-voltage.png]] The maximum input voltage should not exceed 30V, this being the maximum input voltage rating of the 78L05 voltage regulator to power the ATTiny85 microcontroller. ffdaeec2a6764be60fd27704ba3cf36623ec9aec Capacitor types 0 854 3547 3546 2021-11-05T22:36:38Z Admin 1 wikitext text/x-wiki Types of Capacitors (in descending order of stability) * NP0 (negative positive zero, aka 'C0G', aka 'NPO') - extremely stable in rf oscillators - temperature stable - crystal oscillators - variable frequency oscillators (VFO) - beat frequency oscillators (BFO) - rf coupling circuits - temperature use -55C to 125C - capacitance change +/- 0 to 30ppm/C * (silver) mica - stable over wide temperature range - rarely fail - often used for oscillators - same use as NP0 (RF circuits) - capacitance change +/- 0 to 50ppm/C * polystyrene (film) - good for oscillators - stable but keep in cool temperatures - capacitance changes permanently when heated too much - used in solid state equipment (around tubes is too hot) * ceramic - rarely fail - rf bypass capacitors - never use for oscillators or tuned circuits - slightly microphonic - X5R (-55C to 85C) - X7R (-55C to 125C) - Y5V (-30C to 85C) - Z5V (10C to 85C) * PP/polypropylene (film) (orange/brown/green drop) - rf coupling - good for audio amps - not for oscillators - not very stable * PET/polyester (film) (MKT, Mylar) - heat and humidity resistance * tantalum - not for audio - non-linear - good for rf bypass - good for timing (e.g. 555) - available in capacitances well above 1uF - polar - temperature stable * Electrolytic (aluminium film) - poor stability - available in capacitances well above 1uF - good for timing (e.g. 555) - polar * paper in oil - stability ok - replace (paper goes acidic over time) - replace with polypropylene * foil capacitor (old style) - stability ok - replace with polypropylene 9bcf58d9e868a2699acd673445747dd20bad415c Electronics 0 82 3548 3540 2021-12-12T05:37:31Z Admin 1 /* Projects using an Atmel AVR Microcotroller */ wikitext text/x-wiki [[Image:DIP8.jpg|150px]] [[File:IC-SOIC8.jpg|100px]] ==Datasheets== [[Datasheets]] A selection of various datasheets for electronic components. ==Microcontroller Presentation Notes== [[mcu-notes-01]] Introduction to Atmel Microcontrollers [[mcu-notes-02]] Getting Started with Arduino ==Projects using an Atmel AVR Microcotroller== [[mcu_0046-lcd-3wire]] [[mcu_0050-handheld-tempsensor]] [[mcu_0051-lcd-i2c-board]] [[mcu_0052-i2c-master]] [[mcu_0053-AVR-Fuse-Resetter]] [[mcu_0054-nokia-mbus-sms-tx-rx]] [[mcu_0055-rs232-tempsensor]] [[mcu_0056-nokia-48x84-i2c-board]] [[mcu_0057-lcd-i2c-eval-board]] [[mcu_0058-ATtiny85-eval-board]] [[mcu_0059-ATtiny84-eval-board]] [[mcu_0060-Voltage-data-logger]] [[mcu_0062-LCD-48x84-RC-Enclosure-top-pcb]] [[mcu_0088-AVR-programmer]] [[mcu_0084-voltage-datalogger]] [[mcu_0093-NiMH-battery-charger]] [[mcu_0118-wireless-sensor-board]] [[mcu_0126-iambic-keyer]] [[mcu_0134-AD8307-power-meter]] [[mcu_0137-SLA-charge-controller]] [[mcu_0145-EEPROM-programmer]] [[CNC-machine]] ==AVR Programmers== [[pololu programmer]] ==Projects using a Microchip PIC16F84 Microcotroller== [[mcu_0021-tempsensor]] ==Opamp-circuits== [[opamp-filters]] High and Low-Pass filters for AFSK/APRS/Packet ==PCB Schematics and Design== [[PCB designs]] [[Diptrace]] Libraries [[PCB antennas]] ==Microcontroller C code examples== [[ATtiny85_ADC]] [[ATtiny84_ADC]] [[ATtiny84 enable pullup resistors]] [[ATtiny85_PWM]] [[ATtiny84_WDT_sleep]] [[ATtiny85_WDT_sleep]] [[ATMega328 WDT sleep]] [[AVR Functions and Libraries]] [[Tips_n_Tricks]] [[Arduino]] ==LTSpice== [[LTSpice]] ==Moteino== [[moteino-setup]] ==Power supplies and Energy management== * Renewable energy [[Solarpanels]] [[Battery chargers]] [[Solar PV Calculator]] * Current draw of various devices [[USB-currents]] [[USB-device-currents]] ==Surface Mount FETs compared== [[Surface Mount FETs compared]] ==Projects using an STM32 Microcotroller== [[nanovna-upgrade]] See also: [[Electronics]], [[Datasheets]], [[Links:Electronics]] ==Capacitors== [[capacitor types]] 79c58318d6c85443a8aa08d057023b36917a2105 3567 3548 2021-12-20T01:21:30Z Admin 1 wikitext text/x-wiki [[Image:DIP8.jpg|150px]] [[File:IC-SOIC8.jpg|100px]] ==Datasheets== [[Datasheets]] A selection of various datasheets for electronic components. ==Microcontroller Presentation Notes== [[mcu-notes-01]] Introduction to Atmel Microcontrollers [[mcu-notes-02]] Getting Started with Arduino ==Projects using an Atmel AVR Microcotroller== [[mcu_0046-lcd-3wire]] [[mcu_0050-handheld-tempsensor]] [[mcu_0051-lcd-i2c-board]] [[mcu_0052-i2c-master]] [[mcu_0053-AVR-Fuse-Resetter]] [[mcu_0054-nokia-mbus-sms-tx-rx]] [[mcu_0055-rs232-tempsensor]] [[mcu_0056-nokia-48x84-i2c-board]] [[mcu_0057-lcd-i2c-eval-board]] [[mcu_0058-ATtiny85-eval-board]] [[mcu_0059-ATtiny84-eval-board]] [[mcu_0060-Voltage-data-logger]] [[mcu_0062-LCD-48x84-RC-Enclosure-top-pcb]] [[mcu_0088-AVR-programmer]] [[mcu_0084-voltage-datalogger]] [[mcu_0093-NiMH-battery-charger]] [[mcu_0118-wireless-sensor-board]] [[mcu_0126-iambic-keyer]] [[mcu_0134-AD8307-power-meter]] [[mcu_0137-SLA-charge-controller]] [[mcu_0145-EEPROM-programmer]] [[CNC-machine]] ==AVR Programmers== [[pololu programmer]] ==Projects using a Microchip PIC16F84 Microcotroller== [[mcu_0021-tempsensor]] ==Opamp-circuits== [[opamp-filters]] High and Low-Pass filters for AFSK/APRS/Packet ==PCB Schematics and Design== [[PCB designs]] [[Diptrace]] Libraries [[PCB antennas]] ==Microcontroller C code examples== [[ATtiny85_ADC]] [[ATtiny84_ADC]] [[ATtiny84 enable pullup resistors]] [[ATtiny85_PWM]] [[ATtiny84_WDT_sleep]] [[ATtiny85_WDT_sleep]] [[ATMega328 WDT sleep]] [[AVR Functions and Libraries]] [[Tips_n_Tricks]] [[Arduino]] ==LTSpice== [[LTSpice]] ==Moteino== [[moteino-setup]] ==Power supplies and Energy management== * Renewable energy [[Solarpanels]] [[Battery chargers]] [[Solar PV Calculator]] * Current draw of various devices [[USB-currents]] [[USB-device-currents]] ==Surface Mount FETs compared== [[Surface Mount FETs compared]] ==Projects using an STM32 Microcotroller== [[nanovna-upgrade]] ==Projects using an ESP8266 Microcotroller== [[Wemos D1 Mini]] See also: [[Electronics]], [[Datasheets]], [[Links:Electronics]] ==Capacitors== [[capacitor types]] 4cc384d5de3edbb759de8838c295428f112244bf 3573 3567 2021-12-26T03:03:12Z Admin 1 wikitext text/x-wiki [[Image:DIP8.jpg|150px]] [[File:IC-SOIC8.jpg|100px]] ==Datasheets== [[Datasheets]] A selection of various datasheets for electronic components. ==Microcontroller Presentation Notes== [[mcu-notes-01]] Introduction to Atmel Microcontrollers [[mcu-notes-02]] Getting Started with Arduino ==Projects using an Atmel AVR Microcotroller== [[mcu_0046-lcd-3wire]] [[mcu_0050-handheld-tempsensor]] [[mcu_0051-lcd-i2c-board]] [[mcu_0052-i2c-master]] [[mcu_0053-AVR-Fuse-Resetter]] [[mcu_0054-nokia-mbus-sms-tx-rx]] [[mcu_0055-rs232-tempsensor]] [[mcu_0056-nokia-48x84-i2c-board]] [[mcu_0057-lcd-i2c-eval-board]] [[mcu_0058-ATtiny85-eval-board]] [[mcu_0059-ATtiny84-eval-board]] [[mcu_0060-Voltage-data-logger]] [[mcu_0062-LCD-48x84-RC-Enclosure-top-pcb]] [[mcu_0088-AVR-programmer]] [[mcu_0084-voltage-datalogger]] [[mcu_0093-NiMH-battery-charger]] [[mcu_0118-wireless-sensor-board]] [[mcu_0126-iambic-keyer]] [[mcu_0134-AD8307-power-meter]] [[mcu_0137-SLA-charge-controller]] [[mcu_0145-EEPROM-programmer]] [[CNC-machine]] ==AVR Programmers== [[pololu programmer]] ==Projects using a Microchip PIC16F84 Microcotroller== [[mcu_0021-tempsensor]] ==Opamp-circuits== [[opamp-filters]] High and Low-Pass filters for AFSK/APRS/Packet ==PCB Schematics and Design== [[PCB designs]] [[Diptrace]] Libraries [[PCB antennas]] ==Microcontroller C code examples== [[ATtiny85_ADC]] [[ATtiny84_ADC]] [[ATtiny84 enable pullup resistors]] [[ATtiny85_PWM]] [[ATtiny85_DS18B20]] [[ATtiny84_WDT_sleep]] [[ATtiny85_WDT_sleep]] [[ATMega328 WDT sleep]] [[AVR Functions and Libraries]] [[Tips_n_Tricks]] [[Arduino]] ==LTSpice== [[LTSpice]] ==Moteino== [[moteino-setup]] ==Power supplies and Energy management== * Renewable energy [[Solarpanels]] [[Battery chargers]] [[Solar PV Calculator]] * Current draw of various devices [[USB-currents]] [[USB-device-currents]] ==Surface Mount FETs compared== [[Surface Mount FETs compared]] ==Projects using an STM32 Microcotroller== [[nanovna-upgrade]] ==Projects using an ESP8266 Microcotroller== [[Wemos D1 Mini]] See also: [[Electronics]], [[Datasheets]], [[Links:Electronics]] ==Capacitors== [[capacitor types]] 9833eda33f5fed41845453716a11cdbec04dd735 3575 3573 2021-12-26T03:04:45Z Admin 1 wikitext text/x-wiki [[Image:DIP8.jpg|150px]] [[File:IC-SOIC8.jpg|100px]] ==Datasheets== [[Datasheets]] A selection of various datasheets for electronic components. ==Microcontroller Presentation Notes== [[mcu-notes-01]] Introduction to Atmel Microcontrollers [[mcu-notes-02]] Getting Started with Arduino ==Projects using an Atmel AVR Microcotroller== [[mcu_0046-lcd-3wire]] [[mcu_0050-handheld-tempsensor]] [[mcu_0051-lcd-i2c-board]] [[mcu_0052-i2c-master]] [[mcu_0053-AVR-Fuse-Resetter]] [[mcu_0054-nokia-mbus-sms-tx-rx]] [[mcu_0055-rs232-tempsensor]] [[mcu_0056-nokia-48x84-i2c-board]] [[mcu_0057-lcd-i2c-eval-board]] [[mcu_0058-ATtiny85-eval-board]] [[mcu_0059-ATtiny84-eval-board]] [[mcu_0060-Voltage-data-logger]] [[mcu_0062-LCD-48x84-RC-Enclosure-top-pcb]] [[mcu_0088-AVR-programmer]] [[mcu_0084-voltage-datalogger]] [[mcu_0093-NiMH-battery-charger]] [[mcu_0118-wireless-sensor-board]] [[mcu_0126-iambic-keyer]] [[mcu_0134-AD8307-power-meter]] [[mcu_0137-SLA-charge-controller]] [[mcu_0145-EEPROM-programmer]] [[CNC-machine]] ==AVR Programmers== [[pololu programmer]] ==Projects using a Microchip PIC16F84 Microcotroller== [[mcu_0021-tempsensor]] ==Opamp-circuits== [[opamp-filters]] High and Low-Pass filters for AFSK/APRS/Packet ==PCB Schematics and Design== [[PCB designs]] [[Diptrace]] Libraries [[PCB antennas]] ==Microcontroller C code examples== [[ATtiny85_ADC]] [[ATtiny84_ADC]] [[ATtiny84 enable pullup resistors]] [[ATtiny85_PWM]] [[ATtiny85_DS18B20]] [[ATtiny84_WDT_sleep]] [[ATtiny85_WDT_sleep]] [[ATMega328 WDT sleep]] [[ATMega328_DS18B20]] [[AVR Functions and Libraries]] [[Tips_n_Tricks]] [[Arduino]] ==LTSpice== [[LTSpice]] ==Moteino== [[moteino-setup]] ==Power supplies and Energy management== * Renewable energy [[Solarpanels]] [[Battery chargers]] [[Solar PV Calculator]] * Current draw of various devices [[USB-currents]] [[USB-device-currents]] ==Surface Mount FETs compared== [[Surface Mount FETs compared]] ==Projects using an STM32 Microcotroller== [[nanovna-upgrade]] ==Projects using an ESP8266 Microcotroller== [[Wemos D1 Mini]] See also: [[Electronics]], [[Datasheets]], [[Links:Electronics]] ==Capacitors== [[capacitor types]] 3202e7b669b52756eceddc02358f718c7fbe2f06 3579 3575 2021-12-27T23:09:39Z Admin 1 wikitext text/x-wiki [[Image:DIP8.jpg|150px]] [[File:IC-SOIC8.jpg|100px]] ==Datasheets== [[Datasheets]] A selection of various datasheets for electronic components. ==Microcontroller Presentation Notes== [[mcu-notes-01]] Introduction to Atmel Microcontrollers [[mcu-notes-02]] Getting Started with Arduino ==Projects using an Atmel AVR Microcotroller== [[mcu_0046-lcd-3wire]] [[mcu_0050-handheld-tempsensor]] [[mcu_0051-lcd-i2c-board]] [[mcu_0052-i2c-master]] [[mcu_0053-AVR-Fuse-Resetter]] [[mcu_0054-nokia-mbus-sms-tx-rx]] [[mcu_0055-rs232-tempsensor]] [[mcu_0056-nokia-48x84-i2c-board]] [[mcu_0057-lcd-i2c-eval-board]] [[mcu_0058-ATtiny85-eval-board]] [[mcu_0059-ATtiny84-eval-board]] [[mcu_0060-Voltage-data-logger]] [[mcu_0062-LCD-48x84-RC-Enclosure-top-pcb]] [[mcu_0088-AVR-programmer]] [[mcu_0084-voltage-datalogger]] [[mcu_0093-NiMH-battery-charger]] [[mcu_0118-wireless-sensor-board]] [[mcu_0126-iambic-keyer]] [[mcu_0134-AD8307-power-meter]] [[mcu_0136-remote-433MHz-transmitter]] [[mcu_0137-SLA-charge-controller]] [[mcu_0145-EEPROM-programmer]] [[CNC-machine]] ==AVR Programmers== [[pololu programmer]] ==Projects using a Microchip PIC16F84 Microcotroller== [[mcu_0021-tempsensor]] ==Opamp-circuits== [[opamp-filters]] High and Low-Pass filters for AFSK/APRS/Packet ==PCB Schematics and Design== [[PCB designs]] [[Diptrace]] Libraries [[PCB antennas]] ==Microcontroller C code examples== [[ATtiny85_ADC]] [[ATtiny84_ADC]] [[ATtiny84 enable pullup resistors]] [[ATtiny85_PWM]] [[ATtiny85_DS18B20]] [[ATtiny84_WDT_sleep]] [[ATtiny85_WDT_sleep]] [[ATMega328 WDT sleep]] [[ATMega328_DS18B20]] [[AVR Functions and Libraries]] [[Tips_n_Tricks]] [[Arduino]] ==LTSpice== [[LTSpice]] ==Moteino== [[moteino-setup]] ==Power supplies and Energy management== * Renewable energy [[Solarpanels]] [[Battery chargers]] [[Solar PV Calculator]] * Current draw of various devices [[USB-currents]] [[USB-device-currents]] ==Surface Mount FETs compared== [[Surface Mount FETs compared]] ==Projects using an STM32 Microcotroller== [[nanovna-upgrade]] ==Projects using an ESP8266 Microcotroller== [[Wemos D1 Mini]] See also: [[Electronics]], [[Datasheets]], [[Links:Electronics]] ==Capacitors== [[capacitor types]] 8d4e33904eb2eb910e01c00407be77848b3faa35 3580 3579 2021-12-27T23:11:49Z Admin 1 wikitext text/x-wiki [[Image:DIP8.jpg|150px]] [[File:IC-SOIC8.jpg|100px]] ==Datasheets== [[Datasheets]] A selection of various datasheets for electronic components. ==Microcontroller Presentation Notes== [[mcu-notes-01]] Introduction to Atmel Microcontrollers [[mcu-notes-02]] Getting Started with Arduino ==Projects using an Atmel AVR Microcotroller== [[mcu_0046-lcd-3wire]] [[mcu_0050-handheld-tempsensor]] [[mcu_0051-lcd-i2c-board]] [[mcu_0052-i2c-master]] [[mcu_0053-AVR-Fuse-Resetter]] [[mcu_0054-nokia-mbus-sms-tx-rx]] [[mcu_0055-rs232-tempsensor]] [[mcu_0056-nokia-48x84-i2c-board]] [[mcu_0057-lcd-i2c-eval-board]] [[mcu_0058-ATtiny85-eval-board]] [[mcu_0059-ATtiny84-eval-board]] [[mcu_0060-Voltage-data-logger]] [[mcu_0062-LCD-48x84-RC-Enclosure-top-pcb]] [[mcu_0088-AVR-programmer]] [[mcu_0084-voltage-datalogger]] [[mcu_0093-NiMH-battery-charger]] [[mcu_0118-wireless-sensor-board]] [[mcu_0126-iambic-keyer]] [[mcu_0134-AD8307-power-meter]] [[mcu_0137-SLA-charge-controller]] [[mcu_0139-remote-433MHz-transmitter]] [[mcu_0145-EEPROM-programmer]] [[CNC-machine]] ==AVR Programmers== [[pololu programmer]] ==Projects using a Microchip PIC16F84 Microcotroller== [[mcu_0021-tempsensor]] ==Opamp-circuits== [[opamp-filters]] High and Low-Pass filters for AFSK/APRS/Packet ==PCB Schematics and Design== [[PCB designs]] [[Diptrace]] Libraries [[PCB antennas]] ==Microcontroller C code examples== [[ATtiny85_ADC]] [[ATtiny84_ADC]] [[ATtiny84 enable pullup resistors]] [[ATtiny85_PWM]] [[ATtiny85_DS18B20]] [[ATtiny84_WDT_sleep]] [[ATtiny85_WDT_sleep]] [[ATMega328 WDT sleep]] [[ATMega328_DS18B20]] [[AVR Functions and Libraries]] [[Tips_n_Tricks]] [[Arduino]] ==LTSpice== [[LTSpice]] ==Moteino== [[moteino-setup]] ==Power supplies and Energy management== * Renewable energy [[Solarpanels]] [[Battery chargers]] [[Solar PV Calculator]] * Current draw of various devices [[USB-currents]] [[USB-device-currents]] ==Surface Mount FETs compared== [[Surface Mount FETs compared]] ==Projects using an STM32 Microcotroller== [[nanovna-upgrade]] ==Projects using an ESP8266 Microcotroller== [[Wemos D1 Mini]] See also: [[Electronics]], [[Datasheets]], [[Links:Electronics]] ==Capacitors== [[capacitor types]] 87f13ba3e133583fb07fbe2b5d86654ac34d36f5 File:EEPROM STK12C68 a.jpg 6 856 3551 2021-12-12T07:14:16Z Admin 1 STK12C68 with modifications (DS1225Y replacement) wikitext text/x-wiki == Summary == STK12C68 with modifications (DS1225Y replacement) 893cfc7344d6015ad1d65f6df4b231cf5f0140bb File:EEPROM STK12C68 b.jpg 6 857 3552 2021-12-12T07:14:37Z Admin 1 STK12C68 with modifications (DS1225Y replacement) wikitext text/x-wiki == Summary == STK12C68 with modifications (DS1225Y replacement) 893cfc7344d6015ad1d65f6df4b231cf5f0140bb File:EEPROM-programmer arduino 74HC595 top.jpg 6 858 3554 2021-12-12T07:15:43Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:EEPROM-programmer arduino 74HC595 bottom.jpg 6 859 3555 2021-12-12T07:16:53Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0145 EEPROM programmer schematic.png 6 860 3557 2021-12-13T00:10:58Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:STK12C68 pinout.png 6 861 3562 2021-12-13T00:54:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0145-EEPROM-programmer 0 855 3566 3565 2021-12-13T01:29:53Z Admin 1 wikitext text/x-wiki This programmer helped me write the calibration data of my Tektronix 2445B oscilloscope to a new chip. The programmer works with 65,536 (64k) bit parallel-addressable RAM chips (8,192 words by 8 bits) such as the DS1225Y, STK12C68, and probably many others. This design uses three IO pins from the arduino (clock, latch, data) to fill the two serial shift registers to set the address bits and then uses 8x IO pins from the arduino to set the 8-bit value bits for an address. The chips I intended to program with this design only have 28 pins, which only leaves room for 13 address lines. This means that only addresses up to (2^13 =) 8,192 can be written to. This is why the 3 Most Significant Bits of the 2nd serial shift register are unused. Schematic: [[File:0145 EEPROM programmer schematic.png]] The Arduino based EEPROM programmer, using two 74HC595 serial shift registers: [[File:EEPROM-programmer arduino 74HC595 top.jpg]] [[File:EEPROM-programmer arduino 74HC595 bottom.jpg]] I built this programmer so that I could rescue my aging Tektronix 2445B oscilloscope. Inside this oscilloscope is a Non-volatile RAM chip that holds the calibration data. This data is unique to each oscilloscope and requires an elaborate calibration procedure and specialised test equipment to obtain and store this data inside the RAM chip. Without this data the oscilloscope is unusable. The original RAM chip that came with this oscilloscope is a Dallas DS1225Y. This chip will retain the data inside, but only if a constant voltage is applied. The manufacturers of this chip came up with a clever hack by adding a small button-cell battery and potting the chip inside a slightly bigger package. This is a neat solution, but only as long as the battery is able to provide enough power. Since the battery and chip are glued together it is almost impossible to swap out the battery for a fresh one. Since I wanted to keep using my 2445B oscilloscope I decided to upgrade the RAM chip with a model that doesn't need an internal battery anymore. The option I went with is the Cypress STK12C68. It uses the same protocol and pinout for reading and writing data. It doesn't have (or needs) a battery, but it does need an external capacitor. The capacitor is only needed for write operations and even if the capacitor is disconnected the internal RAM still retains the data. This was an acceptable compromise. The pinout of the STK12C68: [[File:STK12C68 pinout.png]] The new STK12C68 EEPROM chip after making the modifications for placement inside the 2445B oscilloscope: [[File:EEPROM STK12C68 a.jpg]] [[File:EEPROM STK12C68 b.jpg]] Arduino code: <pre> /* DS1225Y/STK12C68/FM16W08 EEPROM Programmer using 74HC595 serial shift registers LSB <--------------------------------> MSB +----------------+ +----------------+ | HC595 QA 15| --> A0 | HC595 QA 15| --> A8 | QB 1| --> A1 | QB 1| --> A9 | QC 2| --> A2 | QC 2| --> A10 data--->|14 SER QD 3| --> A3 +--------->|14 SER QD 3| --> A11 clock-->|11 SRCLK QE 4| --> A4 | clock-->|11 SRCLK QE 4| --> A12 latch-->|12 RCLK QF 5| --> A5 | latch-->|12 RCLK QF 5| NC | QG 6| --> A6 | | QG 6| NC | QH 7| --> A7 | | QH 7| NC | QH' 9+----------+ | QH' 9| NC +---+13 OE SRCLR 10+---+ +---+13 OE SRCLR 10+---+ | +----------------+ | | +----------------+ | GND Vcc GND Vcc address bits data bits ------------ --------- Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q 5 6 7 8 9 10 11 12 <-- Arduino D-pins H G F E D C B A H G F E D C B A 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 <-- [ DS1225Y ] | | | | | | | | | | | | | | | | | | | | | | | | NC NC NC | | | | | | | | | | | | +-- A0 (pin 10) | | | | | | | +-- DQ0 (pin 11) | | | | | | | | | | | +---- A1 (pin 9) | | | | | | +---- DQ1 (pin 12) | | | | | | | | | | +------ A2 (pin 8) | | | | | +------ DQ2 (pin 13) | | | | | | | | | +-------- A3 (pin 7) | | | | +-------- DQ3 (pin 15) | | | | | | | | +---------- A4 (pin 6) | | | +---------- DQ4 (pin 16) | | | | | | | +------------ A5 (pin 5) | | +------------ DQ5 (pin 17) | | | | | | +-------------- A6 (pin 4) | +-------------- DQ6 (pin 18) | | | | | +---------------- A7 (pin 3) +---------------- DQ7 (pin 19) | | | | +-------------------- A8 (pin 25) | | | +---------------------- A9 (pin 24) | | +------------------------ A10 (pin 21) | +--------------------------- A11 (pin 23) +------------------------------ A12 (pin 2) NOTES: ---[STK12C68]--- - a capacitor (68uF - 220uF) must be connected between pins 1 (Vcap) and 14 (Vss/GND) to utilise the chip's AutoStore (on device power-down) feature. - Pin 1 and Pin 26 must not touch the IC-socket of the A5-Board! Last modified: 10 Dec 2021 Author: M. Post Sketch/project: 0145 */ // address lines are controlled with 2x serial shift registers #define DATA 2 // EEPROM pin 14 DATA (SER or DS) #define LATCH 3 // EEPROM pin 12 LATCH (RCLK or ST_CP) #define CLOCK 4 // EEPROM pin 11 CLOCK (SRCLK or SH_CP) #define WRITE_ENABLE 13 // D13 #define OUTPUT_ENABLE 14 // A0 = 14 when used as Digital IO #define CHIP_ENABLE 15 // A1 = 15 when used as Digital IO #define CHIPTYPE 1 // 0=DS1225Y, 1=STK12C68, 2=FM16W08 #define MAX_ADDRESS 8192 // set to 8192 to write/read addresses for a full memory bank // data lines #define DQ0 5 #define DQ1 6 #define DQ2 7 #define DQ3 8 #define DQ4 9 #define DQ5 10 #define DQ6 11 #define DQ7 12 String command; uint16_t addr=0; // begin reading at this address uint8_t data_byte=0; // holds value read from eeprom // Tektronix 2445B calibration data const PROGMEM uint16_t data[] = { 0x3e, 0x1e, 0x3e, 0x65, 0x3f, 0x65, 0x3f, 0x65, 0x3f, 0x65, 0x89, 0x79, 0x89, 0x79, 0x8a, 0x79, 0x8a, 0x79, 0xb9, 0x1d, 0x29, 0x2d, 0x00, 0x32, 0x4a, 0x48, 0x52, 0x5a, 0x43, 0x6a, 0x1d, 0x03, 0x41, 0x15, 0xf3, 0x22, 0xf6, 0x36, 0x63, 0x43, 0x1c, 0x12, 0x74, 0x23, 0xff, 0x7f, 0x00, 0x01, 0x64, 0x01, 0x00, 0x00, 0x08, 0x01, 0xa0, 0x00, 0x50, 0x85, 0x12, 0x00, 0x00, 0xc0, 0x02, 0x1a, 0x04, 0x91, 0x20, 0x48, 0x17, 0x77, 0x21, 0x61, 0x04, 0x08, 0x00, 0x10, 0x93, 0x00, 0xff, 0x8a, 0xa8, 0xbd, 0x38, 0xdd, 0x0c, 0x1e, 0x00, 0x0c, 0x00, 0x0f, 0x0a, 0x02, 0x26, 0x78, 0x03, 0x0a, 0x00, 0x02, 0x07, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x12, 0x00, 0x9d, 0x00, 0xc0, 0xf6, 0x75, 0x62, 0x00, 0x99, 0x91, 0x28, 0x28, 0x39, 0xfa, 0xfe, 0x04, 0x77, 0x00, 0x02, 0x6b, 0x08, 0xb2, 0x03, 0x3d, 0x03, 0x31, 0x02, 0x28, 0x02, 0xdf, 0x28, 0xe6, 0xc0, 0x20, 0x00, 0xf3, 0x00, 0xab, 0x1c, 0xbe, 0x1f, 0x61, 0x1f, 0xae, 0x1f, 0x9e, 0x0d, 0x9a, 0x02, 0x66, 0x1d, 0x3f, 0x1f, 0x4e, 0x1f, 0xa7, 0x1c, 0xab, 0x0c, 0xb9, 0x02, 0xc2, 0x00, 0xe6, 0x00, 0x0d, 0x18, 0x00, 0xee, 0x16, 0xc3, 0x21, 0x1c, 0x12, 0x74, 0x23, 0xdf, 0x02, 0xb2, 0x02, 0xb9, 0x0d, 0x3f, 0x02, 0x12, 0x06, 0x29, 0x0d, 0xe6, 0x02, 0x52, 0x06, 0x00, 0x00, 0x04, 0x00, 0x35, 0xea, 0x00, 0xae, 0x27, 0x1c, 0x56, 0x11, 0x00, 0x99, 0x12, 0x00, 0x00, 0x10, 0x7a, 0x02, 0x1c, 0x00, 0x80, 0x00, 0x41, 0x05, 0x50, 0x02, 0x1c, 0x00, 0x80, 0x00, 0xf6, 0x06, 0xeb, 0xaf, 0x00, 0x00, 0x04, 0x00, 0x01, 0xff, 0x5f, 0x00, 0x75, 0x02, 0x0b, 0x0e, 0x1d, 0x03, 0xf3, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x5a, 0x00, 0x22, 0x04, 0x04, 0x84, 0x3c, 0x02, 0x8a, 0xf5, 0x00, 0x97, 0x02, 0x00, 0x02, 0x00, 0x33, 0x75, 0x02, 0x01, 0x01, 0x05, 0x01, 0x01, 0x00, 0x01, 0xff, 0xff, 0xf8, 0xff, 0x00, 0xf8, 0x20, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0xf7, 0x41, 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, 0xbf, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x60, 0x00, 0x00, 0x24, 0x00, 0x00, 0x31, 0x03, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0xf9, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x12, 0x00, 0x00, 0x21, 0x12, 0x00, 0x00, 0x1e, 0x10, 0x00, 0x00, 0xa2, 0x70, 0x78, 0x0a, 0x00, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x9d, 0xfe, 0x06, 0x01, 0xfd, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x64, 0x12, 0x25, 0x01, 0x09, 0xae, 0x07, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x71, 0x06, 0x5c, 0x02, 0x60, 0x02, 0xe2, 0xff, 0x7e, 0x02, 0xfc, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x51, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x16, 0x00, 0x07, 0x00, 0xfc, 0x03, 0x02, 0x01, 0x00, 0x00, 0xff, 0x5f, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x06, 0xf3, 0x01, 0x96, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x73, 0x1a, 0x8b, 0x6b, 0xad, 0x68, 0xa3, 0x55, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0xf8, 0x01, 0x00, 0x07, 0x01, 0x01, 0x01, 0x1d, 0x00, 0x24, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xec, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x08, 0x42, 0x03, 0x6e, 0x02, 0x28, 0x0e, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x00, 0x0f, 0x20, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0xff, 0xf4, 0xf4, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x22, 0x00, 0x55, 0x55, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x17, 0x7a, 0x24, 0xda, 0x35, 0x79, 0x48, 0x07, 0x5c, 0x00, 0x6b, 0xc3, 0x12, 0x27, 0x52, 0x1c, 0x74, 0xea, 0x00, 0xb8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xd2, 0xd2, 0xa5, 0xd2, 0xfe, 0xe0, 0xfe, 0x41, 0xd1, 0x9d, 0xd0, 0xfe, 0xd2, 0xa5, 0xc0, 0xfe, 0xd2, 0xd2, 0xc0, 0xd2, 0xfe, 0xd2, 0xfe, 0xe1, 0xfe, 0x41, 0xd1, 0xd0, 0x00, 0xff, 0xe3, 0x22, 0xfe, 0x41, 0xc0, 0x00, 0x64, 0xc7, 0x00, 0xc1, 0xc4, 0x07, 0xd7, 0x99, 0xe8, 0x00, 0xc4, 0x07, 0x00, 0x13, 0xe1, 0x00, 0x3d, 0x12, 0x01, 0xdf, 0xb7, 0xc2, 0x96, 0x00, 0xb3, 0x5d, 0xc8, 0xd7, 0xc1, 0xf7, 0x05, 0xc0, 0x7a, 0x01, 0x0f, 0x16, 0x01, 0x39, 0x13, 0x12, 0x01, 0xea, 0x2f, 0xc2, 0xd1, 0x00, 0x4f, 0x00, 0x04, 0x07, 0x07, 0x08, 0x3f, 0x00, 0x03, 0x07, 0x51, 0x08, 0xa7, 0x00, 0x71, 0x00, 0x1b, 0x07, 0x0c, 0x67, 0x75, 0xfc, 0x22, 0xfc, 0x02, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x17, 0x00, 0x00, 0x36, 0x6e, 0x00, 0xff, 0x0e, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x2a, 0xff, 0x00, 0xd2, 0x00, 0xff, 0x00, 0xff, 0x00, 0x01, 0x00, 0x0a, 0x05, 0x00, 0x05, 0x46, 0xfc, 0xdc, 0x05, 0xc0, 0x04, 0xdc, 0x24, 0x14, 0x45, 0x08, 0x65, 0x08, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x62, 0x22, 0x48, 0x0f, 0x64, 0x00, 0x00, 0x2e, 0x20, 0x00, 0x2e, 0x04, 0xb0, 0x0c, 0x27, 0x04, 0xb6, 0x0c, 0x00, 0x00, 0xd2, 0x2a, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x04, 0x17, 0xf9, 0x00, 0xf9, 0xf9, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xf5, 0xf7, 0xf7, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x00, 0xbc, 0xac, 0xb8, 0xd4, 0xbc, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x02, 0x01, 0x80, 0x02, 0x40, 0x02, 0x60, 0x01, 0x42, 0x00, 0x00, 0x21, 0x64, 0x04, 0x00, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0xfe, 0x06, 0x58, 0xfd, 0x6e, 0xe6, 0x00, 0x4d, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x13, 0x0e, 0xbe, 0x03, 0x92, 0x16, 0x55, 0x2b, 0xea, 0x0e, 0xfc, 0x16, 0x92, 0xff, 0x09, 0x00, 0x00, 0x2d, 0x51, 0xb3, 0x4e, 0x4d, 0x53, 0xc5, 0x55, 0xfd, 0x0f, 0x0f, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0xff, 0x55, 0x55, 0x03, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x00, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x03, 0x01, 0x89, 0x02, 0x40, 0x04, 0x69, 0x20, 0x62, 0x09, 0x08, 0x21, 0x64, 0x04, 0x20, 0x20, 0x08, 0x00, 0x10, 0x00, 0xff, 0x00, 0x00, 0xfc, 0xfe, 0x06, 0x58, 0xfd, 0x64, 0x9c, 0x00, 0xc7, 0x15, 0x00, 0x00, 0x41, 0x37, 0x00, 0x47, 0x04, 0x0d, 0xbd, 0x12, 0x4e, 0x17, 0x64, 0x25, 0xa5, 0x0d, 0xdc, 0x12, 0x4e, 0xff, 0x64, 0x00, 0x00, 0x5e, 0x51, 0xcf, 0x4e, 0xd6, 0x4d, 0x92, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x20, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4e, 0xbb, 0x85, 0x01, 0x00, 0x00, 0x18, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0x00, 0xb8, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 0x01, 0x01, 0x00, 0x03, 0x41, 0x02, 0x6a, 0x20, 0x11, 0x0a, 0x00, 0x21, 0x64, 0x04, 0x00, 0x08, 0x08, 0x00, 0x10, 0x00, 0xff, 0x00, 0x00, 0xfc, 0xfe, 0x06, 0x57, 0xfd, 0x69, 0xef, 0x00, 0xbd, 0x14, 0x00, 0x00, 0xa7, 0x37, 0x00, 0x47, 0x13, 0x0a, 0xbd, 0x00, 0x34, 0x24, 0x00, 0x2c, 0x99, 0x0a, 0x75, 0x20, 0x34, 0xff, 0x44, 0x00, 0x00, 0x2e, 0x50, 0xc1, 0x47, 0xc4, 0x4d, 0x4b, 0x54, 0x00, 0x08, 0x0f, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x1a, 0x01, 0x00, 0x00, 0x40, 0x0a, 0x4f, 0x20, 0x22, 0x0f, 0x00, 0x22, 0x64, 0x14, 0x20, 0x28, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x58, 0xfd, 0x6f, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff, 0x36, 0x00, 0x43, 0xed, 0x21, 0x9f, 0x00, 0xfb, 0x26, 0x00, 0x27, 0x26, 0x12, 0x94, 0x2f, 0xf1, 0xff, 0x3c, 0x00, 0x00, 0xfe, 0x47, 0xfc, 0x4f, 0xff, 0x57, 0x01, 0x5c, 0x00, 0x08, 0x0f, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xfe, 0x0f, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x1e, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x03, 0x00, 0x23, 0x2b, 0x21, 0x06, 0x23, 0xfb, 0x02, 0x12, 0x99, 0x0f, 0x07, 0x8b, 0x0b, 0x2c, 0x14, 0x7a, 0x00, 0x01, 0x75, 0x03, 0x08, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x4e, 0x65, 0xff, 0x00, 0xff, 0x00, 0x05, 0x00, 0xff, 0x00, 0xff, 0x00, 0xa0, 0x00, 0x4c, 0x1d, 0x4e, 0x50, 0x0c, 0x54, 0xe7, 0x00, 0x5c, 0xea, 0x0c, 0xc3, 0x0b, 0xe4, 0x68, 0x54, 0x6a, 0x00, 0x98, 0x76, 0xff, 0x00, 0xed, 0x41, 0x7f, 0x00, 0x00, 0x00, 0xc3, 0x5c, 0x27, 0x6b, 0xc3, 0x5c, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x6f, 0x01, 0x00, 0x48, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x02, 0x00, 0x00, 0x62, 0x00, 0x2c, 0x00, 0x02, 0x00, 0x04, 0x1d, 0x02, 0xff, 0x4c, 0xeb, 0xff, 0x10, 0x36, 0x0a, 0x68, 0x0a, 0x82, 0x00, 0x77, 0x02, 0xff, 0x00, 0x68, 0x02, 0xff, 0xff, 0x60, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x0f, 0x00, 0xff, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x01, 0x01, 0x0c, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x02, 0x02, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0xff, 0x69, 0x00, 0xfb, 0x07, 0x01, 0xff, 0x01, 0xff, 0x05, 0xff, 0x01, 0xff, 0xfd, 0x0c, 0xfe, 0xbf, 0x02, 0xca, 0x00, 0xe6, 0x00, 0xff, 0x00, 0x00, 0x45, 0x03, 0x99, 0x00, 0x00, 0x48, 0x05, 0x04, 0x03, 0x15, 0x00, 0x45, 0x00, 0x00, 0xff, 0x07, 0x4b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x45, 0x03, 0x31, 0x08, 0x30, 0x08, 0x00, 0xff, 0x00, 0xff, 0x00, 0x01, 0x01, 0x02, 0xd4, 0x01, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0x95, 0x00, 0x01, 0xb6, 0x00, 0x01, 0x00, 0x00, 0x02, 0x01, 0x09, 0x08, 0x99, 0x00, 0x99, 0x33, 0x99, 0xc8, 0x98, 0x32, 0x98, 0x9c, 0x97, 0x06, 0x96, 0x70, 0x96, 0xda, 0x95, 0x44, 0x95, 0xae, 0x94, 0x18, 0x93, 0x82, 0x93, 0xec, 0x92, 0x56, 0x92, 0xc0, 0x91, 0x2a, 0x90, 0x94, 0x90, 0xfe, 0x8f, 0x68, 0x8f, 0xd2, 0x8e, 0x3c, 0x8e, 0xa6, 0x8d, 0x10, 0x8c, 0x7a, 0x8c, 0xe4, 0x8b, 0x4e, 0x8b, 0xb8, 0x8a, 0x22, 0x89, 0x8c, 0x89, 0xf6, 0x88, 0x60, 0x00, 0xca, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x1d, 0x01, 0x00, 0x79, 0x99, 0x00, 0x01, 0x32, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x9c, 0x00, 0x1a, 0xd6, 0xff, 0x22, 0xff, 0x00, 0x53, 0x08, 0x00, 0x00, 0x00, 0x00, 0x66, 0x48, 0x04, 0x9d, 0xea, 0x9c, 0x00, 0x14, 0xff, 0x80, 0x80, 0x00, 0xff, 0x00, 0x35, 0x0c, 0x45, 0x08, 0x65, 0x08, 0xcc, 0x0f, 0xcc, 0x1f, 0x26, 0x00, 0xe6, 0x0f, 0x03, 0x6c, 0x08, 0xff, 0x08, 0x3a, 0x00, 0x64, 0x00, 0x00, 0x00, 0x08, 0x14, 0x00, 0x22, 0x22, 0xff, 0xff, 0x00, 0xff, 0x48, 0x00, 0x08, 0x02, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x04, 0x48, 0x00, 0x80, 0x45, 0x08, 0x65, 0x08, 0x00, 0x00, 0x00, 0xff, 0x00, 0x20, 0xff, 0x00, 0x3c, 0x01, 0xff, 0xff, 0xff, 0x7b, 0x00, 0x84, 0xff, 0x45, 0x00, 0xe8, 0xff, 0x00, 0xf0, 0x1e, 0x21, 0x00, 0x94, 0xaf, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x1d, 0x01, 0xe8, 0x01, 0xba, 0x00, 0xcf, 0x0c, 0x40, 0x7e, 0xfe, 0x41, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x41, 0x00, 0xb8, 0x00, 0xff, 0x00, 0x00, 0x03, 0x90, 0x0d, 0x05, 0x0d, 0xe6, 0x0d, 0xe8, 0x0d, 0xef, 0x0d, 0xee, 0x0d, 0xe8, 0x0d, 0xee, 0x0d, 0xed, 0x0d, 0xe2, 0x0d, 0xbe, 0x0d, 0xbd, 0x0d, 0xb7, 0x0d, 0xbd, 0x0d, 0xbd, 0x0e, 0xb1, 0x0e, 0x57, 0x0e, 0x56, 0x0e, 0x50, 0x0e, 0x57, 0x0e, 0x56, 0x0e, 0x4a, 0x0d, 0x51, 0x0d, 0xb2, 0x0d, 0xab, 0x0d, 0xb7, 0x0d, 0xb7, 0x0d, 0x4d, 0x0d, 0x4d, 0x0d, 0x4d, 0x0d, 0x4d, 0x0d, 0x4f, 0x0d, 0x53, 0x0d, 0x52, 0x0d, 0x4b, 0x0d, 0x4f, 0x0d, 0x4e, 0x0d, 0x4a, 0x0d, 0x4e, 0x0d, 0x90, 0x0d, 0x92, 0x0d, 0x96, 0x0d, 0x94, 0x0d, 0x8d, 0x0d, 0x91, 0x0d, 0x90, 0x0d, 0x8c, 0x0d, 0x90, 0x0d, 0x2a, 0x0d, 0x27, 0x0d, 0x2b, 0x0d, 0x29, 0x0d, 0xbd, 0x00, 0x90, 0x0d, 0x14, 0x00, 0x90, 0x9d, 0x3e, 0x9d, 0xc7, 0xff, 0x95, 0x00, 0x82, 0x00, 0x42, 0x00, 0xff, 0x00, 0xff, 0xae, 0xfd, 0x30, 0xfe, 0xff, 0x4c, 0x01, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x02, 0xff, 0x12, 0xff, 0x05, 0x1c, 0x05, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xb3, 0x04, 0xdb, 0x24, 0xd3, 0x04, 0xbd, 0x24, 0xad, 0x04, 0x96, 0x04, 0xcf, 0x24, 0xd0, 0x04, 0xb7, 0x04, 0xb1, 0x04, 0xb7, 0x22, 0x37, 0x22, 0x34, 0x02, 0x36, 0x02, 0x35, 0x02, 0x50, 0x02, 0x36, 0x02, 0x30, 0x22, 0x31, 0x02, 0x30, 0x02, 0x44, 0x20, 0x72, 0x20, 0x1e, 0x20, 0x1d, 0x20, 0x1e, 0x00, 0x1c, 0x3b, 0xa6, 0x1d, 0x40, 0x1d, 0x0e, 0x3c, 0xc7, 0x1f, 0xc0, 0x3f, 0xc1, 0x1f, 0xbe, 0x3f, 0xa7, 0x1f, 0xb4, 0x02, 0x35, 0x02, 0x3c, 0x02, 0x30, 0x22, 0x2f, 0x1c, 0xf5, 0x3d, 0xc9, 0x3e, 0x5f, 0x10, 0x00, 0x3f, 0xad, 0x1f, 0xa9, 0x3f, 0xab, 0x1f, 0xa3, 0x1f, 0xaf, 0x02, 0xe1, 0x02, 0xe1, 0x02, 0xdd, 0x22, 0xdc, 0x27, 0x9e, 0x28, 0x49, 0x28, 0x4a, 0x08, 0x6f, 0x08, 0x55, 0x08, 0x77, 0x08, 0x59, 0x00, 0x5d, 0x28, 0x49, 0x08, 0x48, 0x28, 0x70, 0x28, 0x57, 0x28, 0x75, 0x08, 0x56, 0x00, 0x5e, 0x23, 0x47, 0x23, 0x33, 0x03, 0x34, 0x26, 0x5c, 0x06, 0x4f, 0x26, 0x66, 0x26, 0x59, 0x22, 0xdc, 0x22, 0xe0, 0x18, 0x3e, 0x2e, 0x9d, 0x0e, 0x99, 0x26, 0xf6, 0x26, 0xde, 0x02, 0x72, 0x02, 0x7b, 0x01, 0x44, 0x21, 0x49, 0x27, 0xe5, 0x27, 0xfb, 0x25, 0x17, 0x04, 0x53, 0x06, 0x16, 0x27, 0x49, 0x26, 0x0a, 0x05, 0x2c, 0x06, 0x43, 0x05, 0x7f, 0x07, 0x42, 0x07, 0x72, 0x06, 0xd5, 0x04, 0x4d, 0x04, 0x56, 0x04, 0x1e, 0x05, 0x75, 0x27, 0x16, 0x26, 0xfa, 0x25, 0xd4, 0x25, 0xdd, 0x25, 0xa5, 0x22, 0xd9, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xab, 0x08, 0x14, 0x08, 0x28, 0x00, 0x07, 0x1f, 0xb7, 0x3c, 0xb9, 0x1c, 0xcf, 0x00, 0xc7, 0x00, 0xfd, 0x00, 0xd7, 0x00, 0xff, 0x00, 0x6f, 0xd2, 0xff, 0xfa, 0xe0, 0x01, 0xff, 0xff, 0x8b, 0x04, 0xff, 0xff, 0x5c, 0x11, 0xfe, 0xfd, 0xa9, 0xa2, 0x77, 0xff, 0x99, 0x9c, 0xef, 0xff, 0x23, 0x60, 0xfd, 0xfd, 0x00, 0x20, 0xf1, 0xfd, 0xe0, 0x01, 0x7f, 0xff, 0x14, 0x00, 0xff, 0xff, 0x13, 0x4b, 0xf7, 0xff, 0x77, 0x8f, 0xff, 0xff, 0x48, 0x22, 0xff, 0xbf, 0xcf, 0x21, 0xff, 0xff, 0xc8, 0x91, 0xdf, 0xfd, 0x34, 0xfd, 0xef, 0xfd, 0x83, 0x14, 0xef, 0xff, 0x03, 0x09, 0xfd, 0x7e, 0x0e, 0xc3, 0xfe, 0xf7, 0x00, 0x12, 0xef, 0x5b, 0x70, 0x04, 0xe0, 0xff, 0xdc, 0xb0, 0x6f, 0x6f, 0x14, 0x8a, 0x7f, 0xef, 0x57, 0xc3, 0xf1, 0x7f, 0x00, 0x06, 0xfb, 0x2c, 0x50, 0x2d, 0xa8, 0x0d, 0xd4, 0x2d, 0xd0, 0x0d, 0xd8, 0x0d, 0xd8, 0x2d, 0xc4, 0x0d, 0xb4, 0x2d, 0xb0, 0x0d, 0xb4, 0x2d, 0xc8, 0x2d, 0xdc, 0x0d, 0xb8, 0x2d, 0xa4, 0x0d, 0xa0, 0x10, 0x0a, 0x10, 0x0a, 0x10, 0x0a, 0x10, 0x0a, 0x10, 0x0a, 0x31, 0xe8, 0x0d, 0x24, 0x2b, 0xc4, 0x2a, 0xfa, 0x2a, 0x7e, 0x2a, 0x4e, 0x0a, 0x34, 0x0a, 0x20, 0x0a, 0x1a, 0x0a, 0x1c, 0x2a, 0x22, 0x0a, 0x26, 0x2a, 0x24, 0x0a, 0x20, 0x2a, 0x24, 0x0b, 0xb8, 0x0b, 0xb8, 0x0b, 0xb8, 0x0b, 0xb8, 0x0b, 0xb8, 0x2e, 0xba, 0x2e, 0xba, 0x2e, 0xba, 0x2e, 0xba, 0x2e, 0xb6, 0x2e, 0x9e, 0x2e, 0x92, 0x0e, 0x66, 0x0d, 0xde, 0x0c, 0xf2, 0x0c, 0xf2, 0x28, 0x4a, 0x0b, 0x74, 0x3f, 0xfb, 0x1c, 0xcf, 0x1c, 0xd4, 0x1c, 0xda, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0xa0, 0x07, 0xe4, 0x00, 0x00, 0x00, 0x00 }; void setup() { pinMode(DATA,OUTPUT); pinMode(LATCH,OUTPUT); // LOW=don't update outputs pinMode(CLOCK,OUTPUT); digitalWrite(OUTPUT_ENABLE,HIGH); // not outputting pinMode(OUTPUT_ENABLE,OUTPUT); digitalWrite(CHIP_ENABLE,HIGH); // chip disabled pinMode(CHIP_ENABLE,OUTPUT); digitalWrite(WRITE_ENABLE,HIGH); // not writing pinMode(WRITE_ENABLE,OUTPUT); Serial.begin(9600); show_options(); } void show_options() { Serial.println("DS1225Y/STK12C68/FM16W08 EEPROM Programmer (Project 0145)"); Serial.println(""); Serial.println("Available commands:"); Serial.println(" read (read from EEPROM)"); Serial.println(" write (write data to EEPROM"); Serial.println(" verify (verify EEPROM with const data"); Serial.println(" wipe (write zeroes to EEPROM"); Serial.println(""); Serial.println(""); } void datalines_output() { pinMode(DQ0,OUTPUT); pinMode(DQ1,OUTPUT); pinMode(DQ2,OUTPUT); pinMode(DQ3,OUTPUT); pinMode(DQ4,OUTPUT); pinMode(DQ5,OUTPUT); pinMode(DQ6,OUTPUT); pinMode(DQ7,OUTPUT); } void datalines_input() { pinMode(DQ0,INPUT); pinMode(DQ1,INPUT); pinMode(DQ2,INPUT); pinMode(DQ3,INPUT); pinMode(DQ4,INPUT); pinMode(DQ5,INPUT); pinMode(DQ6,INPUT); pinMode(DQ7,INPUT); } void set_address(uint16_t address) { // write the 16-bit EEPROM address to the two serial shift registers digitalWrite(LATCH,LOW); shiftOut(DATA, CLOCK, MSBFIRST, highByte(address)); shiftOut(DATA, CLOCK, MSBFIRST, lowByte(address)); digitalWrite(LATCH,HIGH); } void read_eeprom(int verify) { // --- READ --- Serial.print("READ "); if (verify == 1) { Serial.print("(+Verify) "); } Serial.print("from EEPROM:"); Serial.println(""); int mismatch = 0; addr=0; // begin reading at this address datalines_input(); digitalWrite(WRITE_ENABLE, HIGH); // keep WE high during the entire read cycle digitalWrite(CHIP_ENABLE, LOW); // keep CE low during the entire read cycle (ok for SRAM) while (addr < MAX_ADDRESS) { // begin read EEPROM sequence digitalWrite(OUTPUT_ENABLE, HIGH); delayMicroseconds(1); // write the 16-bit EEPROM address to the two serial shift registers set_address(addr); if (CHIPTYPE == 2) { // FRAM requires toggling of CE delayMicroseconds(1); digitalWrite(CHIP_ENABLE, HIGH); delayMicroseconds(1); digitalWrite(CHIP_ENABLE, LOW); delayMicroseconds(1); } digitalWrite(OUTPUT_ENABLE, LOW); // CE and OE must be LOW // WE and HSB are HIGH // read data bits from digital inputs data_byte=0; data_byte |= (digitalRead(DQ7) << 7); data_byte |= (digitalRead(DQ6) << 6); data_byte |= (digitalRead(DQ5) << 5); data_byte |= (digitalRead(DQ4) << 4); data_byte |= (digitalRead(DQ3) << 3); data_byte |= (digitalRead(DQ2) << 2); data_byte |= (digitalRead(DQ1) << 1); data_byte |= digitalRead(DQ0); digitalWrite(OUTPUT_ENABLE, HIGH); delayMicroseconds(1); digitalWrite(OUTPUT_ENABLE, LOW); Serial.print("Addr: "); Serial.print(addr); Serial.print(" 0x"); Serial.print(addr,HEX); Serial.print(" "); Serial.print(data_byte,HEX); if (verify == 1) { // get corresponding data byte that we expect to see at this address int data_byte_exp = pgm_read_byte_near(data + addr); if (data_byte < 16) { Serial.print(" "); } if (data_byte == data_byte_exp) { Serial.print(" Ok"); } else { Serial.print(" MISMATCH -- expected "); Serial.print(data_byte_exp,HEX); mismatch++; } } Serial.println(); addr++; } Serial.println(""); Serial.print("READ finished, "); Serial.print(addr); Serial.println(" Bytes"); Serial.println(""); if (verify == 1) { if (mismatch == 0) { Serial.println("Verification 100% successful"); Serial.println(""); } else { Serial.print(mismatch); Serial.println(" Bytes failed verification."); Serial.println(""); } } } void write_eeprom(int bank) { // --- WRITE --- Serial.println("WRITE to EEPROM:"); Serial.println("--"); addr=0; // begin writing at this address while (addr < MAX_ADDRESS) { // fetch firmware data byte from progmem if (bank == 0) data_byte = 0; // wipe with zeroes if (bank == 1) data_byte = pgm_read_byte_near(data + addr); // write firmware data // write byte to EEPROM digitalWrite(OUTPUT_ENABLE,HIGH); delayMicroseconds(1000); digitalWrite(WRITE_ENABLE, HIGH); delayMicroseconds(1000); // write the 16-bit EEPROM address to the two serial shift registers set_address(addr); delayMicroseconds(1000); datalines_output(); delayMicroseconds(1000); // write data_byte to digital IO pins digitalWrite(DQ0, data_byte & 1); // write bit 0 of data_byte to DQ0 digitalWrite(DQ1, data_byte & 2); // write bit 1 of data_byte to DQ1 digitalWrite(DQ2, data_byte & 4); // write bit 2 of data_byte to DQ2 digitalWrite(DQ3, data_byte & 8); // write bit 3 of data_byte to DQ3 digitalWrite(DQ4, data_byte & 16); // write bit 4 of data_byte to DQ4 digitalWrite(DQ5, data_byte & 32); // write bit 5 of data_byte to DQ5 digitalWrite(DQ6, data_byte & 64); // write bit 6 of data_byte to DQ6 digitalWrite(DQ7, data_byte & 128); // write bit 7 of data_byte to DQ7 // check if what we write is correct delayMicroseconds(1000); if (CHIPTYPE == 2) { // FRAM requires toggling of CE delayMicroseconds(1000); digitalWrite(CHIP_ENABLE, HIGH); delayMicroseconds(1000); digitalWrite(CHIP_ENABLE, LOW); delayMicroseconds(1000); } else { // not toggle required for SRAM digitalWrite(CHIP_ENABLE, LOW); delayMicroseconds(1000); } digitalWrite(WRITE_ENABLE,LOW); delayMicroseconds(1000); digitalWrite(WRITE_ENABLE, HIGH); delayMicroseconds(1000); // CE and WE are LOW // HSB is high (use pullup?) datalines_input(); digitalWrite(OUTPUT_ENABLE,LOW); delayMicroseconds(1000); digitalWrite(OUTPUT_ENABLE,HIGH); delayMicroseconds(1000); digitalWrite(CHIP_ENABLE, HIGH); Serial.print("Addr: "); Serial.print(addr); Serial.print(" 0x"); Serial.print(addr,HEX); Serial.print(" "); Serial.println(data_byte,HEX); addr++; } Serial.println(""); Serial.print("WRITE finished, "); Serial.print(addr); Serial.println(" Bytes"); Serial.println(""); } void loop() { uint16_t addr=0; uint8_t data_byte=0; uint8_t do_write=0; uint8_t do_read=1; while(true) { if(Serial.available()) { command = Serial.readStringUntil('\n'); if(command.equals("read")) { read_eeprom(0); } else if(command.equals("write")) { write_eeprom(1); } else if(command.equals("wipe")) { write_eeprom(0); } else if(command.equals("verify")) { read_eeprom(1); } else{ Serial.println("Invalid command"); } show_options(); } } } <pre> 24b6293aaaa07455ce2f0481fc5f5985b5077eee Wemos D1 Mini 0 862 3568 2021-12-20T01:22:08Z Admin 1 Created page with "How to program the Wemos D1 Mini" wikitext text/x-wiki How to program the Wemos D1 Mini 4b466d8fb270f52ff3d4cd15481ac92851646721 3569 3568 2021-12-20T01:24:42Z Admin 1 wikitext text/x-wiki How to load Tasmota on the Wemos D1 Mini - install and run Arduino 1.8.9 - install esp8266 libraries 'Tools - Manage Libraries' - type: 'esp8266' and select the library from MicroGear (chavee) - install esp8266 boards 'File - Preferences - Additional board manager URLs' add: https://arduino.esp8266.com/stable/package_esp8266com_index.json Then install the boards: 'Tools - Board - Board Manager' - Type: 'esp8266' and install the 'esp8266 by ESP8266 Community' - load board for 'LOLIN (WEMOS) D1 R2 & mini' You can now write sketches to the device. Check the 'Examples' section to get started. Writing an MQTT client to the Wemos D1 Mini using Arduino (This is different to the Tasmota environment which is a fully integrated client platform and has relatively little customisation possibilities) DEPRECATED!! Writing the Tasmota client firmware to a Wemos D1 Mini DEPRECATED!! - download and set up Tasmota libraries and sketches (Sonoff-Tasmota-6.6.0) (where?) - compile and flash to USB attached Wemos D1 Mini - update my_user_config.h for local wifi connection settings - check local dhcp server for ip address - browse to ip upgrade over the air to newer versions is now possible NOTE: newer versions of Tasmota were harder and harder to compile on Arduino. As a result, they have now made available an entirely different development IDE (something 'IO'). If you can compile and write Tasmota to an ESP8266 through Arduino then good for you, but you won't find much support if it doesn't work anymore. DEPRECATED!! DO THIS: Writing the Tasmota client firmware to a Wemos D1 Mini -> download the tasmota.bin binary firmware from github and flash it directly to the board with the esptool.py 5531f08c218869e6c26c088debc4f84cf7e81e93 3570 3569 2021-12-20T01:30:49Z Admin 1 wikitext text/x-wiki How to load Tasmota on the Wemos D1 Mini If you're insterested in just putting Tasmota on a Wemos D1 mini, use esptool.py and upload tasmota.bin straight onto it Do NOT use the debian apt version of esptool, but grab it from github or pip apt-get install pip (or python3-pip) pip install esptool (or pip3 install esptool) apt-get install git git clone https://github.com/espressif/esptool.git to upgrade pip: pip install --upgrade pip esptool.py --port /dev/ttyUSB0 write_flash -fm dout 0x0 tasmota_8.1.0.bin after uploading the firmware the Wemos D1 mini will broadcast a WLAN captive portal. Set the SSID and password, reboot and connect to the 'tasmota-2323' (or whatever number you saw) website (http://tasmota-2323/) If your device doesn't show up in your router's DHCP table, it may still be in 'captive portal' mode and it will advertise its own WLAN. Connect to that and it will take you straight to the internal running tasmota web server. Configure your wifi credentials and reboot. Then set up your mqtt settings. d198e74aafddbefb84bfb21439462160730ce744 3571 3570 2021-12-20T01:51:17Z Admin 1 wikitext text/x-wiki How to load Tasmota on the Wemos D1 Mini If you're insterested in just putting Tasmota on a Wemos D1 mini, use esptool.py and upload tasmota.bin straight onto it Do NOT use the debian apt version of esptool, but grab it from github or pip apt-get install pip (or python3-pip) pip install esptool (or pip3 install esptool) apt-get install git git clone https://github.com/espressif/esptool.git to upgrade pip: pip install --upgrade pip Grab the latest Tasmota.bin from the developer's website: https://tasmota.github.io/docs/Download/ Then just connect the board to the computer with a USB cable (no need to do anything with reset buttons or jumper leads etc..) Command to flash tasmota onto the esp8266: esptool.py --port /dev/ttyUSB0 write_flash -fm dout 0x0 tasmota_8.1.0.bin After uploading the firmware the Wemos D1 mini will broadcast a WLAN captive portal. Set the SSID and password, reboot and connect to the 'tasmota-2323' (or whatever number you saw) website (http://tasmota-2323/) If your device doesn't show up in your router's DHCP table, it may still be in 'captive portal' mode and it will advertise its own WLAN. Connect to that and it will take you straight to the internal running tasmota web server. Configure your wifi credentials and reboot. Then set up your mqtt settings. 7407a6ede2ccdb5432272411c4c624d78f475027 3572 3571 2021-12-20T01:55:07Z Admin 1 wikitext text/x-wiki How to load Tasmota on the Wemos D1 Mini If you're insterested in just putting Tasmota on a Wemos D1 mini, use esptool.py and upload tasmota.bin straight onto it Do NOT use the debian apt version of esptool, but grab it from github or pip apt-get install pip (or python3-pip) pip install esptool (or pip3 install esptool) apt-get install git git clone https://github.com/espressif/esptool.git to upgrade pip: pip install --upgrade pip Grab the latest Tasmota.bin from the developer's website: https://tasmota.github.io/docs/Download/ Then just connect the board to the computer with a USB cable (no need to do anything with reset buttons or jumper leads etc..) Command to flash tasmota onto the esp8266: esptool.py --port /dev/ttyUSB0 write_flash -fs 1M -fm dout 0x0 tasmota_8.1.0.bin After uploading the firmware the Wemos D1 mini, simply unplug the USB and re-insert it. After about 10 seconds, the Wemos D1 mini will broadcast a WLAN captive portal. Click on the SSID to connect to it and open a browser to navigate to the tasmota page (it will load automatically). Once tasmota is loaded in the browser set the local WiFi credentials you wish to connect to and let it reboot. If your device doesn't show up in your router's DHCP table, it may still be in 'captive portal' mode and it will advertise its own WLAN. Connect to that and it will take you straight to the internal running tasmota web server. Configure your wifi credentials and reboot. Then set up your mqtt settings. c3bdc3479b53e7b28eca8f7101120bc4cbb2802d ATtiny85 DS18B20 0 863 3574 2021-12-26T03:03:39Z Admin 1 Created page with " <pre> /* DS18B20 code for ATMega328 (arduino) This code does not rely on any external OneWire or DallasTemperature sensor libraries. DS18B20 temperature sensor ------------------------- DS18S20 byte 1 byte 2 ------------------------------- 76543210 76543210 00101010 00000000 IIIIDDDD SSSSSIII 3210..." wikitext text/x-wiki <pre> /* DS18B20 code for ATMega328 (arduino) This code does not rely on any external OneWire or DallasTemperature sensor libraries. DS18B20 temperature sensor ------------------------- DS18S20 byte 1 byte 2 ------------------------------- 76543210 76543210 00101010 00000000 IIIIDDDD SSSSSIII 3210 654 I = Celsius integer digits (signed) 000 0010 = 2 D = Number of decimal steps (x multiplier) 1010 = 10 steps x 0.0625 S = Signedness (0=positive, 1=negative) 00000 = + DS1820 LSB (1st 7 bits are the temperature) and the last bit represents .0 or .5 degrees Example: '87654321' TTTTTTTH T = Temperature H = halves H=0 (.0), H=1 (.5) MSB (is 0 when positive, 1 when negative) */ //#include <avr/io.h> //#include <util/delay.h> //#include <string.h> //#include <math.h> #define THERM_PORT PORTB #define THERM_DDR DDRB #define THERM_PIN PINB #define THERM_DQ PB2 // Define DS1820 DQ pin #define THERM_INPUT_MODE() THERM_DDR&=~(1<<THERM_DQ) #define THERM_OUTPUT_MODE() THERM_DDR|=(1<<THERM_DQ) #define THERM_LOW() THERM_PORT&=~(1<<THERM_DQ) #define THERM_HIGH() THERM_PORT|=(1<<THERM_DQ) #define HIGH 1 #define LOW 0 #define INPUT 1 #define OUTPUT 0 #define THERM_CMD_CONVERTTEMP 0x44 #define THERM_CMD_RSCRATCHPAD 0xbe #define THERM_CMD_WSCRATCHPAD 0x4e #define THERM_CMD_CPYSCRATCHPAD 0x48 #define THERM_CMD_RECEEPROM 0xb8 #define THERM_CMD_RPWRSUPPLY 0xb4 #define THERM_CMD_SEARCHROM 0xf0 #define THERM_CMD_READROM 0x33 #define THERM_CMD_MATCHROM 0x55 #define THERM_CMD_SKIPROM 0xcc #define THERM_CMD_ALARMSEARCH 0xec #define THERM_DECIMAL_STEPS_12BIT 625 // 0.0625, for 12-bit accuracy #define PRESENCE_ERR 0xFF #define DATA_ERR 0xFF #define LAST_DEVICE 0x00 #define SEARCH_FIRST 0xFF #define CLEAR(s) memset(&(s), 0, sizeof(s)) // to clear an array int got_ack; uint8_t romcodes[20][9]; // store romcode of 20 sensors max uint8_t scratchpad[9]; // stores a scratchpad char buffer[16]; void setup() { Serial.begin(9600); } void pMode(int pin,int state) { if (state == OUTPUT) { (DDRB |= (1 << pin)); } else { (DDRB &= ~(1 << pin)); } } void dWrite(int pin, int state) { if (state == HIGH) { (PORTB |= (1 << pin)); } else { (PORTB &= ~(1 << pin)); } } int dRead(int pin) { if (bit_is_set(PINB,pin)) { return 1; } else { return 0; } } // -- OneWire functions -- uint8_t owReset(int Pin) { uint8_t i; dWrite(Pin, HIGH); pMode(Pin, INPUT); dWrite(Pin, LOW); pMode(Pin, OUTPUT); // bring low for 480us _delay_us(480); // Release line and wait for 60us dWrite(Pin, HIGH); pMode(Pin, INPUT); _delay_us(60); // store line value and wait for completion of 480us period i=dRead(Pin); _delay_us(480); // return measured line value return i; } uint8_t therm_reset() { uint8_t i; // pull line low and wait for 480us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(480); _delay_us(480); // Release line and wait for 60us THERM_INPUT_MODE(); //therm_delay(60); _delay_us(60); // store line value and wait for completion of 480us period i=(THERM_PIN & (1<<THERM_DQ)); //therm_delay(420); _delay_us(480); // return measured line value return i; } void therm_write_bit(uint8_t bit) { // pull line low for 1us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(1); _delay_us(1); // if we want to write 1, release the line (if not will keep low) if (bit) THERM_INPUT_MODE(); // wait for 60us and release the line //therm_delay(60); _delay_us(60); THERM_INPUT_MODE(); } uint8_t therm_read_bit(void) { uint8_t bit=0; // pull line low for 1us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(1); _delay_us(1); // release line and wait for 14us THERM_INPUT_MODE(); //therm_delay(14); _delay_us(14); // read line value if (THERM_PIN&(1<<THERM_DQ)) bit=1; // wait for 45us to end and return read value //therm_delay(45); _delay_us(45); return bit; } uint8_t therm_read_byte(void) { uint8_t i=8, n=0; while(i--) { // shift one position right and store read value n>>=1; n|=(therm_read_bit()<<7); } return n; } void therm_write_byte(uint8_t byte) { uint8_t i=8; while(i--) { // write actual bit and shift one position right to make the next bit ready therm_write_bit(byte&1); byte>>=1; } } unsigned char therm_rom_search(unsigned char diff, unsigned char *id) { // scans a one-wire bus for all attached DS18x20 sensors unsigned char i, j, next_diff; unsigned char b; if( therm_reset() ) return PRESENCE_ERR; // error, no device found therm_write_byte( THERM_CMD_SEARCHROM ); // ROM search command next_diff = LAST_DEVICE; // unchanged on last device i = 8 * 8; // 8 bytes do { j = 8; // 8 bits do { b = therm_read_bit(); // read bit // read complement bit if( therm_read_bit() ) { if( b ) // 11 return DATA_ERR; // data error } else { if( !b ) { // 00 = 2 devices if( diff > i || ((*id & 1) && diff != i) ) { b = 1; // now 1 next_diff = i; // next pass 0 } } } therm_write_bit( b ); // write bit *id >>= 1; if( b ) // store bit *id |= 0x80; i--; } while( --j ); id++; // next byte } while( i ); return next_diff; // to continue search } void start_meas( void ) { if( PINB & 1<< THERM_DQ ) { therm_write_byte(THERM_CMD_CONVERTTEMP); // read scratchpad PORTB |= 1<< THERM_DQ; DDRB |= 1<< THERM_DQ; // parasite power on } else { // Short circuit on bus _delay_ms(1000); } } int scanbus(void) { // outputs the number of found devices and stores all roms in an array unsigned char id[8], diff; unsigned char i,x; unsigned char device_counter=0; // clear array for (x=1; x <= 20; x++) { romcodes[x][0] = 0; } for( diff = SEARCH_FIRST; diff != LAST_DEVICE; ) { diff = therm_rom_search( diff, id ); if( diff == PRESENCE_ERR ) { //Serial.println("scanbus: no sensors found"); _delay_ms(1000); break; } if( diff == DATA_ERR ) { //Serial.println("scanbus: Bus error"); _delay_ms(1000); break; } if( id[0] == 0x28 || id[0] == 0x10 ) { // valid temperature sensor found // store romcode in array for( i = 0; i < 8; i++ ) { romcodes[device_counter][i]=id[i]; } device_counter=device_counter+1; } } return device_counter; } void therm_romtemp(uint8_t device) { // address a specific sensor and retrieve its temperature uint8_t i; therm_reset(); therm_write_byte(THERM_CMD_MATCHROM); for (i=0 ; i < 8; i++) { therm_write_byte(romcodes[device][i]); } therm_write_byte(THERM_CMD_CONVERTTEMP); // wait until conversion is complete while(!therm_read_bit()); therm_reset(); therm_write_byte(THERM_CMD_MATCHROM); for (i=0 ; i < 8; i++) { therm_write_byte(romcodes[device][i]); } therm_write_byte(THERM_CMD_RSCRATCHPAD); // store the replies in the 'scratchpad' variable for (i=0 ; i < 2; i++) { scratchpad[i]=therm_read_byte(); } therm_reset(); } void showdevs() { // outputs all device romcodes stored in the array unsigned char device=0; unsigned char rombyte=0; uint8_t digit; uint16_t decimal; while (1) { if (romcodes[device][0] != 0) { // valid romcode found in array // target the sensor and read its temperature therm_romtemp(device); // this fills the 'scratchpad' variable for (rombyte=0; rombyte < 8; rombyte++) { Serial.print(romcodes[device][rombyte],HEX); // display the romcode Serial.print(" "); } Serial.print(" "); // store temperature integer digits and decimal digits // display the 'scratchpad' variable fields // --half degree accuracy -- (9 bit) // test if temperature is .0 or .5 //decimal = scratchpad[0] & (1 << 0); // decimals is in bit 0, store value // move temperature bits on position to the right //scratchpad[0]>>=1; //Serial.print(scratchpad[0]); //if (decimal == 0) // Serial.print(".0"); //else // Serial.print(".5"); // -- 2-decimal of a degree accuracy -- (12 bit) // store whole digits digit=scratchpad[0]>>4; digit|=(scratchpad[1]&0x7)<<4; // store decimal digits decimal=scratchpad[0]&0xf; decimal*=THERM_DECIMAL_STEPS_12BIT; Serial.print(digit); Serial.print("."); Serial.print(decimal); Serial.print(" C"); Serial.println(); _delay_ms(1000); device=device+1; } else { break; } } } void loop() { uint8_t ack; int devs; while (1) { ack = owReset(THERM_DQ); if (ack == 1) { //Serial.println("no sensors found"); _delay_ms(1000); } else { // sensor activity detected while (1) { devs=scanbus(); // detect and store device rom's in an array if (devs > 0) { _delay_ms(1000); _delay_ms(1000); showdevs(); } else { Serial.print(devs); Serial.println(" sensors found"); } _delay_ms(1000); _delay_ms(1000); _delay_ms(1000); _delay_ms(1000); } } _delay_ms(1000); _delay_ms(1000); } } </pre> b7a4342824850915703d14c0afb0e12a4f1c9a0c 3577 3574 2021-12-26T04:19:35Z Admin 1 wikitext text/x-wiki <pre> /* DS18B20 code for DigiStump (ATtiny85) programmed with Arduino - board manager url: http://digistump.com/package_digistump_index.json - programmer: Micronucleus This code does not rely on any external OneWire or DallasTemperature sensor libraries. DS18B20 temperature sensor ------------------------- DS18S20 byte 1 byte 2 ------------------------------- 76543210 76543210 00101010 00000000 IIIIDDDD SSSSSIII 3210 654 I = Celsius integer digits (signed) 000 0010 = 2 D = Number of decimal steps (x multiplier) 1010 = 10 steps x 0.0625 S = Signedness (0=positive, 1=negative) 00000 = + DS1820 LSB (1st 7 bits are the temperature) and the last bit represents .0 or .5 degrees Example: '87654321' TTTTTTTH T = Temperature H = halves H=0 (.0), H=1 (.5) MSB (is 0 when positive, 1 when negative) */ #include <avr/io.h> #include <util/delay.h> #define THERM_PORT PORTB #define THERM_DDR DDRB #define THERM_PIN PINB #define THERM_DQ PB2 // Define DS1820 DQ pin #define THERM_INPUT_MODE() THERM_DDR&=~(1<<THERM_DQ) #define THERM_OUTPUT_MODE() THERM_DDR|=(1<<THERM_DQ) #define THERM_LOW() THERM_PORT&=~(1<<THERM_DQ) #define THERM_HIGH() THERM_PORT|=(1<<THERM_DQ) #define HIGH 1 #define LOW 0 #define INPUT 1 #define OUTPUT 0 #define THERM_CMD_CONVERTTEMP 0x44 #define THERM_CMD_RSCRATCHPAD 0xbe #define THERM_CMD_WSCRATCHPAD 0x4e #define THERM_CMD_CPYSCRATCHPAD 0x48 #define THERM_CMD_RECEEPROM 0xb8 #define THERM_CMD_RPWRSUPPLY 0xb4 #define THERM_CMD_SEARCHROM 0xf0 #define THERM_CMD_READROM 0x33 #define THERM_CMD_MATCHROM 0x55 #define THERM_CMD_SKIPROM 0xcc #define THERM_CMD_ALARMSEARCH 0xec #define THERM_DECIMAL_STEPS_12BIT 625 // 0.0625, for 12-bit accuracy #define PRESENCE_ERR 0xFF #define DATA_ERR 0xFF #define LAST_DEVICE 0x00 #define SEARCH_FIRST 0xFF #define CLEAR(s) memset(&(s), 0, sizeof(s)) // to clear an array int got_ack; uint8_t romcodes[20][9]; // store romcode of 20 sensors max uint8_t scratchpad[9]; // stores a scratchpad char buffer[16]; void setup() { //Serial.begin(9600); } void pMode(int pin,int state) { if (state == OUTPUT) { (DDRB |= (1 << pin)); } else { (DDRB &= ~(1 << pin)); } } void dWrite(int pin, int state) { if (state == HIGH) { (PORTB |= (1 << pin)); } else { (PORTB &= ~(1 << pin)); } } int dRead(int pin) { if (bit_is_set(PINB,pin)) { return 1; } else { return 0; } } // -- OneWire functions -- uint8_t owReset(int Pin) { uint8_t i; dWrite(Pin, HIGH); pMode(Pin, INPUT); dWrite(Pin, LOW); pMode(Pin, OUTPUT); // bring low for 480us _delay_us(480); // Release line and wait for 60us dWrite(Pin, HIGH); pMode(Pin, INPUT); _delay_us(60); // store line value and wait for completion of 480us period i=dRead(Pin); _delay_us(480); // return measured line value return i; } uint8_t therm_reset() { uint8_t i; // pull line low and wait for 480us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(480); _delay_us(480); // Release line and wait for 60us THERM_INPUT_MODE(); //therm_delay(60); _delay_us(60); // store line value and wait for completion of 480us period i=(THERM_PIN & (1<<THERM_DQ)); //therm_delay(420); _delay_us(480); // return measured line value return i; } void therm_write_bit(uint8_t bit) { // pull line low for 1us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(1); _delay_us(1); // if we want to write 1, release the line (if not will keep low) if (bit) THERM_INPUT_MODE(); // wait for 60us and release the line //therm_delay(60); _delay_us(60); THERM_INPUT_MODE(); } uint8_t therm_read_bit(void) { uint8_t bit=0; // pull line low for 1us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(1); _delay_us(1); // release line and wait for 14us THERM_INPUT_MODE(); //therm_delay(14); _delay_us(14); // read line value if (THERM_PIN&(1<<THERM_DQ)) bit=1; // wait for 45us to end and return read value //therm_delay(45); _delay_us(45); return bit; } uint8_t therm_read_byte(void) { uint8_t i=8, n=0; while(i--) { // shift one position right and store read value n>>=1; n|=(therm_read_bit()<<7); } return n; } void therm_write_byte(uint8_t byte) { uint8_t i=8; while(i--) { // write actual bit and shift one position right to make the next bit ready therm_write_bit(byte&1); byte>>=1; } } unsigned char therm_rom_search(unsigned char diff, unsigned char *id) { // scans a one-wire bus for all attached DS18x20 sensors unsigned char i, j, next_diff; unsigned char b; if( therm_reset() ) return PRESENCE_ERR; // error, no device found therm_write_byte( THERM_CMD_SEARCHROM ); // ROM search command next_diff = LAST_DEVICE; // unchanged on last device i = 8 * 8; // 8 bytes do { j = 8; // 8 bits do { b = therm_read_bit(); // read bit // read complement bit if( therm_read_bit() ) { if( b ) // 11 return DATA_ERR; // data error } else { if( !b ) { // 00 = 2 devices if( diff > i || ((*id & 1) && diff != i) ) { b = 1; // now 1 next_diff = i; // next pass 0 } } } therm_write_bit( b ); // write bit *id >>= 1; if( b ) // store bit *id |= 0x80; i--; } while( --j ); id++; // next byte } while( i ); return next_diff; // to continue search } void start_meas( void ) { if( PINB & 1<< THERM_DQ ) { therm_write_byte(THERM_CMD_CONVERTTEMP); // read scratchpad PORTB |= 1<< THERM_DQ; DDRB |= 1<< THERM_DQ; // parasite power on } else { // Short circuit on bus _delay_ms(1000); } } int scanbus(void) { // outputs the number of found devices and stores all roms in an array unsigned char id[8], diff; unsigned char i,x; unsigned char device_counter=0; // clear array for (x=1; x <= 20; x++) { romcodes[x][0] = 0; } for( diff = SEARCH_FIRST; diff != LAST_DEVICE; ) { diff = therm_rom_search( diff, id ); if( diff == PRESENCE_ERR ) { //Serial.println("scanbus: no sensors found"); _delay_ms(1000); break; } if( diff == DATA_ERR ) { //Serial.println("scanbus: Bus error"); _delay_ms(1000); break; } if( id[0] == 0x28 || id[0] == 0x10 ) { // valid temperature sensor found // store romcode in array for( i = 0; i < 8; i++ ) { romcodes[device_counter][i]=id[i]; } device_counter=device_counter+1; } } return device_counter; } void therm_romtemp(uint8_t device) { // address a specific sensor and retrieve its temperature uint8_t i; therm_reset(); therm_write_byte(THERM_CMD_MATCHROM); for (i=0 ; i < 8; i++) { therm_write_byte(romcodes[device][i]); } therm_write_byte(THERM_CMD_CONVERTTEMP); // wait until conversion is complete while(!therm_read_bit()); therm_reset(); therm_write_byte(THERM_CMD_MATCHROM); for (i=0 ; i < 8; i++) { therm_write_byte(romcodes[device][i]); } therm_write_byte(THERM_CMD_RSCRATCHPAD); // store the replies in the 'scratchpad' variable for (i=0 ; i < 2; i++) { scratchpad[i]=therm_read_byte(); } therm_reset(); } void showdevs() { // outputs all device romcodes stored in the array unsigned char device=0; unsigned char rombyte=0; uint8_t digit; uint16_t decimal; while (1) { if (romcodes[device][0] != 0) { // valid romcode found in array // target the sensor and read its temperature therm_romtemp(device); // this fills the 'scratchpad' variable for (rombyte=0; rombyte < 8; rombyte++) { //Serial.print(romcodes[device][rombyte],HEX); // display the romcode //Serial.print(" "); } //Serial.print(" "); // store temperature integer digits and decimal digits // display the 'scratchpad' variable fields // --half degree accuracy -- (9 bit) // test if temperature is .0 or .5 //decimal = scratchpad[0] & (1 << 0); // decimals is in bit 0, store value // move temperature bits on position to the right //scratchpad[0]>>=1; //Serial.print(scratchpad[0]); //if (decimal == 0) // Serial.print(".0"); //else // Serial.print(".5"); // -- 2-decimal of a degree accuracy -- (12 bit) // store whole digits digit=scratchpad[0]>>4; digit|=(scratchpad[1]&0x7)<<4; // store decimal digits decimal=scratchpad[0]&0xf; decimal*=THERM_DECIMAL_STEPS_12BIT; //Serial.print(digit); //Serial.print("."); //Serial.print(decimal); //Serial.print(" C"); //Serial.println(); _delay_ms(1000); device=device+1; } else { break; } } } void loop() { uint8_t ack; int devs; while (1) { ack = owReset(THERM_DQ); if (ack == 1) { //Serial.println("no sensors found"); _delay_ms(1000); } else { // sensor activity detected while (1) { devs=scanbus(); // detect and store device rom's in an array if (devs > 0) { _delay_ms(1000); _delay_ms(1000); showdevs(); } else { //Serial.print(devs); //Serial.println(" sensors found"); } _delay_ms(1000); _delay_ms(1000); _delay_ms(1000); _delay_ms(1000); } } _delay_ms(1000); _delay_ms(1000); } } </pre> ad5d004980c39afb1f75b7019777e689b88723c2 3578 3577 2021-12-27T01:49:44Z Admin 1 wikitext text/x-wiki <pre> /* DS18B20 code for DigiSpark (ATtiny85) programmed with Arduino - board manager url: http://digistump.com/package_digistump_index.json - board: Digispark Default (16.5MHz) - programmer: Micronucleus NOTE: the digispark board requires re-insertion in a USB socket every time you wish to upload code to it. This code does not rely on any external OneWire or DallasTemperature sensor libraries. DS18B20 temperature sensor ------------------------- DS18S20 byte 1 byte 2 ------------------------------- 76543210 76543210 00101010 00000000 IIIIDDDD SSSSSIII 3210 654 I = Celsius integer digits (signed) 000 0010 = 2 D = Number of decimal steps (x multiplier) 1010 = 10 steps x 0.0625 S = Signedness (0=positive, 1=negative) 00000 = + DS1820 LSB (1st 7 bits are the temperature) and the last bit represents .0 or .5 degrees Example: '87654321' TTTTTTTH T = Temperature H = halves H=0 (.0), H=1 (.5) MSB (is 0 when positive, 1 when negative) */ #include <avr/io.h> #include <util/delay.h> #define THERM_PORT PORTB #define THERM_DDR DDRB #define THERM_PIN PINB #define THERM_DQ PB0 // Define DS1820 DQ pin #define LEDPIN PB1 // built-in LED is on PB1 (Digispark Model A) #define THERM_INPUT_MODE() THERM_DDR&=~(1<<THERM_DQ) #define THERM_OUTPUT_MODE() THERM_DDR|=(1<<THERM_DQ) #define THERM_LOW() THERM_PORT&=~(1<<THERM_DQ) #define THERM_HIGH() THERM_PORT|=(1<<THERM_DQ) #define HIGH 1 #define LOW 0 #define INPUT 1 #define OUTPUT 0 #define THERM_CMD_CONVERTTEMP 0x44 #define THERM_CMD_RSCRATCHPAD 0xbe #define THERM_CMD_WSCRATCHPAD 0x4e #define THERM_CMD_CPYSCRATCHPAD 0x48 #define THERM_CMD_RECEEPROM 0xb8 #define THERM_CMD_RPWRSUPPLY 0xb4 #define THERM_CMD_SEARCHROM 0xf0 #define THERM_CMD_READROM 0x33 #define THERM_CMD_MATCHROM 0x55 #define THERM_CMD_SKIPROM 0xcc #define THERM_CMD_ALARMSEARCH 0xec #define THERM_DECIMAL_STEPS_12BIT 625 // 0.0625, for 12-bit accuracy #define PRESENCE_ERR 0xFF #define DATA_ERR 0xFF #define LAST_DEVICE 0x00 #define SEARCH_FIRST 0xFF #define CLEAR(s) memset(&(s), 0, sizeof(s)) // to clear an array int got_ack; uint8_t romcodes[20][9]; // store romcode of 20 sensors max uint8_t scratchpad[9]; // stores a scratchpad char buffer[16]; void setup() { } void pMode(int pin,int state) { if (state == OUTPUT) { (DDRB |= (1 << pin)); } else { (DDRB &= ~(1 << pin)); } } void dWrite(int pin, int state) { if (state == HIGH) { (PORTB |= (1 << pin)); } else { (PORTB &= ~(1 << pin)); } } int dRead(int pin) { if (bit_is_set(PINB,pin)) { return 1; } else { return 0; } } void singleBlink() { pMode(LEDPIN,OUTPUT); dWrite(LEDPIN,HIGH); _delay_ms(50); dWrite(LEDPIN,LOW); _delay_ms(500); } void nrBlinker(int nr) { if (nr < 100) for (int i=int(nr/10); i>0; i--) singleBlink(); // blink tens nr = nr - (int) (nr / 10) * 10; delay(1000); if (nr < 10) for (int i=nr; i>0; i--) singleBlink(); // blink ones } // -- OneWire functions -- uint8_t owReset(int Pin) { uint8_t i; dWrite(Pin, HIGH); pMode(Pin, INPUT); dWrite(Pin, LOW); pMode(Pin, OUTPUT); // bring low for 480us _delay_us(480); // Release line and wait for 60us dWrite(Pin, HIGH); pMode(Pin, INPUT); _delay_us(60); // store line value and wait for completion of 480us period i=dRead(Pin); _delay_us(480); // return measured line value return i; } uint8_t therm_reset() { uint8_t i; // pull line low and wait for 480us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(480); _delay_us(480); // Release line and wait for 60us THERM_INPUT_MODE(); //therm_delay(60); _delay_us(60); // store line value and wait for completion of 480us period i=(THERM_PIN & (1<<THERM_DQ)); //therm_delay(420); _delay_us(480); // return measured line value return i; } void therm_write_bit(uint8_t bit) { // pull line low for 1us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(1); _delay_us(1); // if we want to write 1, release the line (if not will keep low) if (bit) THERM_INPUT_MODE(); // wait for 60us and release the line //therm_delay(60); _delay_us(60); THERM_INPUT_MODE(); } uint8_t therm_read_bit(void) { uint8_t bit=0; // pull line low for 1us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(1); _delay_us(1); // release line and wait for 14us THERM_INPUT_MODE(); //therm_delay(14); _delay_us(14); // read line value if (THERM_PIN&(1<<THERM_DQ)) bit=1; // wait for 45us to end and return read value //therm_delay(45); _delay_us(45); return bit; } uint8_t therm_read_byte(void) { uint8_t i=8, n=0; while(i--) { // shift one position right and store read value n>>=1; n|=(therm_read_bit()<<7); } return n; } void therm_write_byte(uint8_t byte) { uint8_t i=8; while(i--) { // write actual bit and shift one position right to make the next bit ready therm_write_bit(byte&1); byte>>=1; } } unsigned char therm_rom_search(unsigned char diff, unsigned char *id) { // scans a one-wire bus for all attached DS18x20 sensors unsigned char i, j, next_diff; unsigned char b; if( therm_reset() ) return PRESENCE_ERR; // error, no device found therm_write_byte( THERM_CMD_SEARCHROM ); // ROM search command next_diff = LAST_DEVICE; // unchanged on last device i = 8 * 8; // 8 bytes do { j = 8; // 8 bits do { b = therm_read_bit(); // read bit // read complement bit if( therm_read_bit() ) { if( b ) // 11 return DATA_ERR; // data error } else { if( !b ) { // 00 = 2 devices if( diff > i || ((*id & 1) && diff != i) ) { b = 1; // now 1 next_diff = i; // next pass 0 } } } therm_write_bit( b ); // write bit *id >>= 1; if( b ) // store bit *id |= 0x80; i--; } while( --j ); id++; // next byte } while( i ); return next_diff; // to continue search } void start_meas( void ) { if( PINB & 1<< THERM_DQ ) { therm_write_byte(THERM_CMD_CONVERTTEMP); // read scratchpad PORTB |= 1<< THERM_DQ; DDRB |= 1<< THERM_DQ; // parasite power on } else { // Short circuit on bus _delay_ms(1000); } } int scanbus(void) { // outputs the number of found devices and stores all roms in an array unsigned char id[8], diff; unsigned char i,x; unsigned char device_counter=0; // clear array for (x=1; x <= 20; x++) { romcodes[x][0] = 0; } for( diff = SEARCH_FIRST; diff != LAST_DEVICE; ) { diff = therm_rom_search( diff, id ); if( diff == PRESENCE_ERR ) { //Serial.println("scanbus: no sensors found"); _delay_ms(1000); break; } if( diff == DATA_ERR ) { //Serial.println("scanbus: Bus error"); _delay_ms(1000); break; } if( id[0] == 0x28 || id[0] == 0x10 ) { // valid temperature sensor found // store romcode in array for( i = 0; i < 8; i++ ) { romcodes[device_counter][i]=id[i]; } device_counter=device_counter+1; } } return device_counter; } void therm_romtemp(uint8_t device) { // address a specific sensor and retrieve its temperature uint8_t i; therm_reset(); therm_write_byte(THERM_CMD_MATCHROM); for (i=0 ; i < 8; i++) { therm_write_byte(romcodes[device][i]); } therm_write_byte(THERM_CMD_CONVERTTEMP); // wait until conversion is complete while(!therm_read_bit()); therm_reset(); therm_write_byte(THERM_CMD_MATCHROM); for (i=0 ; i < 8; i++) { therm_write_byte(romcodes[device][i]); } therm_write_byte(THERM_CMD_RSCRATCHPAD); // store the replies in the 'scratchpad' variable for (i=0 ; i < 2; i++) { scratchpad[i]=therm_read_byte(); } therm_reset(); } void showdevs() { // outputs all device romcodes stored in the array unsigned char device=0; unsigned char rombyte=0; uint8_t digit; uint16_t decimal; while (1) { if (romcodes[device][0] != 0) { // valid romcode found in array // target the sensor and read its temperature therm_romtemp(device); // this fills the 'scratchpad' variable for (rombyte=0; rombyte < 8; rombyte++) { //Serial.print(romcodes[device][rombyte],HEX); // display the romcode //Serial.print(" "); } //Serial.print(" "); // store temperature integer digits and decimal digits // display the 'scratchpad' variable fields // --half degree accuracy -- (9 bit) // test if temperature is .0 or .5 //decimal = scratchpad[0] & (1 << 0); // decimals is in bit 0, store value // move temperature bits on position to the right //scratchpad[0]>>=1; //Serial.print(scratchpad[0]); //if (decimal == 0) // Serial.print(".0"); //else // Serial.print(".5"); // -- 2-decimal of a degree accuracy -- (12 bit) // store whole digits digit=scratchpad[0]>>4; digit|=(scratchpad[1]&0x7)<<4; // store decimal digits decimal=scratchpad[0]&0xf; decimal*=THERM_DECIMAL_STEPS_12BIT; //Serial.print(digit); //Serial.print("."); //Serial.print(decimal); //Serial.print(" C"); nrBlinker(digit); _delay_ms(1000); // decimals are stored as a 4-digit positive number (e.g. 3625), scale back to < 100 decimal = (int) (decimal / 100); nrBlinker(decimal); _delay_ms(1000); _delay_ms(1000); device=device+1; } else { break; } } } void loop() { uint8_t ack; int devs; while (1) { ack = owReset(THERM_DQ); if (ack == 1) { // no sensors found nrBlinker(2); } else { // sensor activity detected devs=scanbus(); // detect and store device rom's in an array if (devs > 0) { _delay_ms(1000); _delay_ms(1000); showdevs(); } else { // unable to get sensible data back from sensors } _delay_ms(1000); _delay_ms(1000); _delay_ms(1000); _delay_ms(1000); } _delay_ms(1000); _delay_ms(1000); } } </pre> 95c05c02ca828125064f5aabf96a927cf1e9f16b ATMega328 DS18B20 0 864 3576 2021-12-26T03:05:07Z Admin 1 Created page with " <pre> /* DS18B20 code for ATMega328 (arduino) This code does not rely on any external OneWire or DallasTemperature sensor libraries. DS18B20 temperature sensor ------------------------- DS18S20 byte 1 byte 2 ------------------------------- 76543210 76543210 00101010 00000000 IIIIDDDD SSSSSIII 3210..." wikitext text/x-wiki <pre> /* DS18B20 code for ATMega328 (arduino) This code does not rely on any external OneWire or DallasTemperature sensor libraries. DS18B20 temperature sensor ------------------------- DS18S20 byte 1 byte 2 ------------------------------- 76543210 76543210 00101010 00000000 IIIIDDDD SSSSSIII 3210 654 I = Celsius integer digits (signed) 000 0010 = 2 D = Number of decimal steps (x multiplier) 1010 = 10 steps x 0.0625 S = Signedness (0=positive, 1=negative) 00000 = + DS1820 LSB (1st 7 bits are the temperature) and the last bit represents .0 or .5 degrees Example: '87654321' TTTTTTTH T = Temperature H = halves H=0 (.0), H=1 (.5) MSB (is 0 when positive, 1 when negative) */ //#include <avr/io.h> //#include <util/delay.h> //#include <string.h> //#include <math.h> #define THERM_PORT PORTB #define THERM_DDR DDRB #define THERM_PIN PINB #define THERM_DQ PB2 // Define DS1820 DQ pin #define THERM_INPUT_MODE() THERM_DDR&=~(1<<THERM_DQ) #define THERM_OUTPUT_MODE() THERM_DDR|=(1<<THERM_DQ) #define THERM_LOW() THERM_PORT&=~(1<<THERM_DQ) #define THERM_HIGH() THERM_PORT|=(1<<THERM_DQ) #define HIGH 1 #define LOW 0 #define INPUT 1 #define OUTPUT 0 #define THERM_CMD_CONVERTTEMP 0x44 #define THERM_CMD_RSCRATCHPAD 0xbe #define THERM_CMD_WSCRATCHPAD 0x4e #define THERM_CMD_CPYSCRATCHPAD 0x48 #define THERM_CMD_RECEEPROM 0xb8 #define THERM_CMD_RPWRSUPPLY 0xb4 #define THERM_CMD_SEARCHROM 0xf0 #define THERM_CMD_READROM 0x33 #define THERM_CMD_MATCHROM 0x55 #define THERM_CMD_SKIPROM 0xcc #define THERM_CMD_ALARMSEARCH 0xec #define THERM_DECIMAL_STEPS_12BIT 625 // 0.0625, for 12-bit accuracy #define PRESENCE_ERR 0xFF #define DATA_ERR 0xFF #define LAST_DEVICE 0x00 #define SEARCH_FIRST 0xFF #define CLEAR(s) memset(&(s), 0, sizeof(s)) // to clear an array int got_ack; uint8_t romcodes[20][9]; // store romcode of 20 sensors max uint8_t scratchpad[9]; // stores a scratchpad char buffer[16]; void setup() { Serial.begin(9600); } void pMode(int pin,int state) { if (state == OUTPUT) { (DDRB |= (1 << pin)); } else { (DDRB &= ~(1 << pin)); } } void dWrite(int pin, int state) { if (state == HIGH) { (PORTB |= (1 << pin)); } else { (PORTB &= ~(1 << pin)); } } int dRead(int pin) { if (bit_is_set(PINB,pin)) { return 1; } else { return 0; } } // -- OneWire functions -- uint8_t owReset(int Pin) { uint8_t i; dWrite(Pin, HIGH); pMode(Pin, INPUT); dWrite(Pin, LOW); pMode(Pin, OUTPUT); // bring low for 480us _delay_us(480); // Release line and wait for 60us dWrite(Pin, HIGH); pMode(Pin, INPUT); _delay_us(60); // store line value and wait for completion of 480us period i=dRead(Pin); _delay_us(480); // return measured line value return i; } uint8_t therm_reset() { uint8_t i; // pull line low and wait for 480us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(480); _delay_us(480); // Release line and wait for 60us THERM_INPUT_MODE(); //therm_delay(60); _delay_us(60); // store line value and wait for completion of 480us period i=(THERM_PIN & (1<<THERM_DQ)); //therm_delay(420); _delay_us(480); // return measured line value return i; } void therm_write_bit(uint8_t bit) { // pull line low for 1us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(1); _delay_us(1); // if we want to write 1, release the line (if not will keep low) if (bit) THERM_INPUT_MODE(); // wait for 60us and release the line //therm_delay(60); _delay_us(60); THERM_INPUT_MODE(); } uint8_t therm_read_bit(void) { uint8_t bit=0; // pull line low for 1us THERM_LOW(); THERM_OUTPUT_MODE(); //therm_delay(1); _delay_us(1); // release line and wait for 14us THERM_INPUT_MODE(); //therm_delay(14); _delay_us(14); // read line value if (THERM_PIN&(1<<THERM_DQ)) bit=1; // wait for 45us to end and return read value //therm_delay(45); _delay_us(45); return bit; } uint8_t therm_read_byte(void) { uint8_t i=8, n=0; while(i--) { // shift one position right and store read value n>>=1; n|=(therm_read_bit()<<7); } return n; } void therm_write_byte(uint8_t byte) { uint8_t i=8; while(i--) { // write actual bit and shift one position right to make the next bit ready therm_write_bit(byte&1); byte>>=1; } } unsigned char therm_rom_search(unsigned char diff, unsigned char *id) { // scans a one-wire bus for all attached DS18x20 sensors unsigned char i, j, next_diff; unsigned char b; if( therm_reset() ) return PRESENCE_ERR; // error, no device found therm_write_byte( THERM_CMD_SEARCHROM ); // ROM search command next_diff = LAST_DEVICE; // unchanged on last device i = 8 * 8; // 8 bytes do { j = 8; // 8 bits do { b = therm_read_bit(); // read bit // read complement bit if( therm_read_bit() ) { if( b ) // 11 return DATA_ERR; // data error } else { if( !b ) { // 00 = 2 devices if( diff > i || ((*id & 1) && diff != i) ) { b = 1; // now 1 next_diff = i; // next pass 0 } } } therm_write_bit( b ); // write bit *id >>= 1; if( b ) // store bit *id |= 0x80; i--; } while( --j ); id++; // next byte } while( i ); return next_diff; // to continue search } void start_meas( void ) { if( PINB & 1<< THERM_DQ ) { therm_write_byte(THERM_CMD_CONVERTTEMP); // read scratchpad PORTB |= 1<< THERM_DQ; DDRB |= 1<< THERM_DQ; // parasite power on } else { // Short circuit on bus _delay_ms(1000); } } int scanbus(void) { // outputs the number of found devices and stores all roms in an array unsigned char id[8], diff; unsigned char i,x; unsigned char device_counter=0; // clear array for (x=1; x <= 20; x++) { romcodes[x][0] = 0; } for( diff = SEARCH_FIRST; diff != LAST_DEVICE; ) { diff = therm_rom_search( diff, id ); if( diff == PRESENCE_ERR ) { //Serial.println("scanbus: no sensors found"); _delay_ms(1000); break; } if( diff == DATA_ERR ) { //Serial.println("scanbus: Bus error"); _delay_ms(1000); break; } if( id[0] == 0x28 || id[0] == 0x10 ) { // valid temperature sensor found // store romcode in array for( i = 0; i < 8; i++ ) { romcodes[device_counter][i]=id[i]; } device_counter=device_counter+1; } } return device_counter; } void therm_romtemp(uint8_t device) { // address a specific sensor and retrieve its temperature uint8_t i; therm_reset(); therm_write_byte(THERM_CMD_MATCHROM); for (i=0 ; i < 8; i++) { therm_write_byte(romcodes[device][i]); } therm_write_byte(THERM_CMD_CONVERTTEMP); // wait until conversion is complete while(!therm_read_bit()); therm_reset(); therm_write_byte(THERM_CMD_MATCHROM); for (i=0 ; i < 8; i++) { therm_write_byte(romcodes[device][i]); } therm_write_byte(THERM_CMD_RSCRATCHPAD); // store the replies in the 'scratchpad' variable for (i=0 ; i < 2; i++) { scratchpad[i]=therm_read_byte(); } therm_reset(); } void showdevs() { // outputs all device romcodes stored in the array unsigned char device=0; unsigned char rombyte=0; uint8_t digit; uint16_t decimal; while (1) { if (romcodes[device][0] != 0) { // valid romcode found in array // target the sensor and read its temperature therm_romtemp(device); // this fills the 'scratchpad' variable for (rombyte=0; rombyte < 8; rombyte++) { Serial.print(romcodes[device][rombyte],HEX); // display the romcode Serial.print(" "); } Serial.print(" "); // store temperature integer digits and decimal digits // display the 'scratchpad' variable fields // --half degree accuracy -- (9 bit) // test if temperature is .0 or .5 //decimal = scratchpad[0] & (1 << 0); // decimals is in bit 0, store value // move temperature bits on position to the right //scratchpad[0]>>=1; //Serial.print(scratchpad[0]); //if (decimal == 0) // Serial.print(".0"); //else // Serial.print(".5"); // -- 2-decimal of a degree accuracy -- (12 bit) // store whole digits digit=scratchpad[0]>>4; digit|=(scratchpad[1]&0x7)<<4; // store decimal digits decimal=scratchpad[0]&0xf; decimal*=THERM_DECIMAL_STEPS_12BIT; Serial.print(digit); Serial.print("."); Serial.print(decimal); Serial.print(" C"); Serial.println(); _delay_ms(1000); device=device+1; } else { break; } } } void loop() { uint8_t ack; int devs; while (1) { ack = owReset(THERM_DQ); if (ack == 1) { //Serial.println("no sensors found"); _delay_ms(1000); } else { // sensor activity detected while (1) { devs=scanbus(); // detect and store device rom's in an array if (devs > 0) { _delay_ms(1000); _delay_ms(1000); showdevs(); } else { Serial.print(devs); Serial.println(" sensors found"); } _delay_ms(1000); _delay_ms(1000); _delay_ms(1000); _delay_ms(1000); } } _delay_ms(1000); _delay_ms(1000); } } </pre> 7efd35147f3c0a4934004784494d852be777b237 File:H34A-module.jpg 6 865 3581 2021-12-27T23:15:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0139-remote-433MHz-transmitter 0 866 3582 2021-12-27T23:15:32Z Admin 1 Created page with "Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. [[File:H34A-module.jpg]]" wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. [[File:H34A-module.jpg]] 74539006d6ead10a90eafef71becb0c9d3018d9e File:0139 Prototype-1 Arduino-nano.jpg 6 867 3583 2021-12-27T23:17:33Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0139 Prototype-2 Digispark ATtiny85.jpg 6 868 3584 2021-12-27T23:19:11Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0139-remote-433MHz-transmitter 0 866 3585 3582 2021-12-27T23:19:23Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. [[File:H34A-module.jpg]] [[File:0139 Prototype-1 Arduino-nano.jpg]] [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] e5f25629d38dca50c4bca9f911c44027cbcb81e8 3587 3585 2021-12-27T23:28:27Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] c44ce645ee63a673ab8927443591ce8a0fa5bbe2 3588 3587 2021-12-28T00:48:12Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] Bill of materials (PCB v1.3): * H34A transmitter module * ATtiny85 SOIC * * 9535de00a8b86a2cc7b698544e34e7b92702d271 3589 3588 2021-12-28T01:04:45Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] Bill of materials (PCB v1.3): <pre> 0139 433mhz transmitter bill of materials R1 1206 20k R2 1206 4k7 R3 1206 1k R4 1206 10k R5 1206 10k R6 1206 10R R7 1206 4k7 C1 1206 1uF C2 1206 1uF C3 1206 1uF C4 1206 1uF U1 SOIC ATTiny85 U2 TO-92 DS18B20 U3 SOT23-5 NCP718 U4 11x11mm H34A module T1 SOT23 (N-Ch FET) BSS138 or Si2302DS T2 SOT23 (P-Ch FET) NDS352AP or BSH203 T3 SOT23 (P-Ch FET) NDS352AP or BSH203 D1 1206 LED </pre> a99c2ec791034191b977f2a8177422a0b36617d0 3591 3589 2021-12-28T01:17:20Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] Schematic: [[File:0139 PCB v1.3 schematic.png]] <pre> 0139 433mhz transmitter bill of materials (PCB v1.3) R1 1206 20k R2 1206 4k7 R3 1206 1k R4 1206 10k R5 1206 10k R6 1206 10R R7 1206 4k7 C1 1206 1uF C2 1206 1uF C3 1206 1uF C4 1206 1uF U1 SOIC ATTiny85 U2 TO-92 DS18B20 U3 SOT23-5 NCP718 U4 11x11mm H34A module T1 SOT23 (N-Ch FET) BSS138 or Si2302DS T2 SOT23 (P-Ch FET) NDS352AP or BSH203 T3 SOT23 (P-Ch FET) NDS352AP or BSH203 D1 1206 LED </pre> 428e402161d95ee06fd761349c9faeaad58cb5fb 3592 3591 2022-01-01T03:09:28Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] Schematic: [[File:0139 PCB v1.3 schematic.png]] <pre> 0139 433mhz transmitter bill of materials -- PCB v1.4 R1 1206 20k R2 1206 4k7 R3 1206 1k R4 1206 10k R5 1206 10k R6 1206 4k7 C1 1206 1uF C2 1206 1uF C3 1206 1uF C4 1206 1uF U1 SOIC ATTiny85 U2 TO-92 DS18B20 U3 TSOT23-5 NCP718ASN330T1G T1 SOT23 (N-Ch FET) BSS138 or Si2302DS T2 SOT23 (P-Ch FET) NDS352AP or BSH203 T3 SOT23 (P-Ch FET) NDS352AP or BSH203 D1 1206 LED </pre> c35b934f6ce532080ed347a0f1711e90098edc5b 3595 3592 2022-01-01T03:23:04Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] Schematic: [[File:0139 PCB v1.3 schematic.png]] Gerbers: [[File:0139-remote-sensors-433Mhz v1.4 gerbers.zip]] Source code: [[File:0139 remote 433MHz transmitter v0.5.ino.zip]] <pre> 0139 433mhz transmitter bill of materials -- PCB v1.4 R1 1206 20k R2 1206 4k7 R3 1206 1k R4 1206 10k R5 1206 10k R6 1206 4k7 C1 1206 1uF C2 1206 1uF C3 1206 1uF C4 1206 1uF U1 SOIC ATTiny85 U2 TO-92 DS18B20 U3 TSOT23-5 NCP718ASN330T1G T1 SOT23 (N-Ch FET) BSS138 or Si2302DS T2 SOT23 (P-Ch FET) NDS352AP or BSH203 T3 SOT23 (P-Ch FET) NDS352AP or BSH203 D1 1206 LED </pre> 7046170aa22ef4b968cb55e6358f26a65a8518ed 3596 3595 2022-05-21T03:45:53Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] Schematic: [[File:0139 PCB v1.3 schematic.png]] Gerbers: [[File:0139-remote-sensors-433Mhz v1.4 gerbers.zip]] Source code: [[File:0139 remote 433MHz transmitter v0.5.ino.zip]] <pre> 0139 remote sensors 433mhz transmitter bill of materials -- PCB v1.5 R1 1206 22k R2 1206 4k7 R3 1206 1k R4 1206 100k R5 1206 100k R6 1206 4k7 C1 1206 1uF C2 1206 1uF C3 1206 100nF C4 1206 10nuF U1 SOIC ATTiny85-20SH U2 TO-92 DS18B20 U3 TSOT23-5 NCP718ASN330T1G T1 SOT23 (N-Ch FET) BSS138 or Si2302DS T2 SOT23 (P-Ch FET) NDS352AP or BSH203 T3 SOT23 (P-Ch FET) NDS352AP or BSH203 D1 1206 LED H34A-433 ASK transmitter 433MHz 2.6-12V </pre> 064fdbb9d7489cf12bcab08951ea8b0254dd9530 3597 3596 2022-05-21T03:48:13Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] Schematic: [[File:0139 PCB v1.5 schematic.png]] Gerbers: [[File:0139-remote-sensors-433Mhz v1.4 gerbers.zip]] Source code: [[File:0139 remote 433MHz transmitter v0.5.ino.zip]] <pre> 0139 remote sensors 433mhz transmitter bill of materials -- PCB v1.5 R1 1206 22k R2 1206 4k7 R3 1206 1k R4 1206 100k R5 1206 100k R6 1206 4k7 C1 1206 1uF C2 1206 1uF C3 1206 100nF C4 1206 10nuF U1 SOIC ATTiny85-20SH U2 TO-92 DS18B20 U3 TSOT23-5 NCP718ASN330T1G T1 SOT23 (N-Ch FET) BSS138 or Si2302DS T2 SOT23 (P-Ch FET) NDS352AP or BSH203 T3 SOT23 (P-Ch FET) NDS352AP or BSH203 D1 1206 LED H34A-433 ASK transmitter 433MHz 2.6-12V </pre> 09f8a01e39192e8fb01e68ed5cc154c8d13bbe6a 3601 3597 2022-05-21T03:55:47Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] Schematic: [[File:0139 PCB v1.5 schematic.png]] Gerbers: [[File:0139-remote-sensors-433Mhz v1.4 gerbers.zip]] Source code: [[File:0139 remote 433MHz transmitter v0.6.ino.zip]] <pre> 0139 remote sensors 433mhz transmitter bill of materials -- PCB v1.5 R1 1206 22k R2 1206 4k7 R3 1206 1k R4 1206 100k R5 1206 100k R6 1206 4k7 C1 1206 1uF C2 1206 1uF C3 1206 100nF C4 1206 10nuF U1 SOIC ATTiny85-20SH U2 TO-92 DS18B20 U3 TSOT23-5 NCP718ASN330T1G T1 SOT23 (N-Ch FET) BSS138 or Si2302DS T2 SOT23 (P-Ch FET) NDS352AP or BSH203 T3 SOT23 (P-Ch FET) NDS352AP or BSH203 D1 1206 LED H34A-433 ASK transmitter 433MHz 2.6-12V </pre> 094fdf3fe177b46dc4bbe190bf00c9cdca91287b 3616 3601 2023-03-23T23:12:12Z Admin 1 wikitext text/x-wiki Home automation project sending telemetry using a low-cost ISM-band (433MHz) transmitter. This is a change of plan from what I originally intended to use (the RFM69HW modules), but with several home automation solutions easily available I decided to make use of these modules instead. This is the bare transmitter module. [[File:H34A-module.jpg]] Here is the transmitter module wrapped in heatshrink and stuck on top of an Arduino Nano [[File:0139 Prototype-1 Arduino-nano.jpg]] Making the overall form factor even smaller by contemplating putting it on a Digispark board. [[File:0139 Prototype-2 Digispark ATtiny85.jpg]] The benefit is that the ATtiny85 modules are fairly cheap and can hold up to 8kB of program memory. A quarter the size of the ATMega328 Arduino but probably still more than enough to send some telemetry. This is the module fitted onto a custom PCB that has the ATtiny85 on the underside. [[File:0139 Prototype-3 Attiny V1.0.jpg]] Final result on top of a 3D printer battery holder [[File:18650-T85-telemetry.jpg]] Schematic: [[File:0139 PCB v1.5 schematic.png]] Gerbers: [[File:0139-remote-sensors-433Mhz v1.4 gerbers.zip]] Source code: [[File:0139 remote 433MHz transmitter v0.6.ino.zip]] <pre> 0139 remote sensors 433mhz transmitter bill of materials -- PCB v1.5 R1 1206 22k R2 1206 4k7 R3 1206 1k R4 1206 100k R5 1206 100k R6 1206 4k7 C1 1206 1uF C2 1206 1uF C3 1206 100nF C4 1206 10nuF U1 SOIC ATTiny85-20SH U2 TO-92 DS18B20 U3 TSOT23-5 NCP718ASN330T1G T1 SOT23 (N-Ch FET) BSS138 or Si2302DS T2 SOT23 (P-Ch FET) NDS352AP or BSH203 T3 SOT23 (P-Ch FET) NDS352AP or BSH203 D1 1206 LED H34A-433 ASK transmitter 433MHz 2.6-12V </pre> 709da82d7d4a4e78e71b2225df07bc0fd298a76e File:0139 Prototype-3 Attiny V1.0.jpg 6 869 3586 2021-12-27T23:24:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0139 PCB v1.3 schematic.png 6 870 3590 2021-12-28T01:16:42Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0139-remote-sensors-433Mhz v1.4 gerbers.zip 6 871 3593 2022-01-01T03:21:28Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0139 remote 433MHz transmitter v0.5.ino.zip 6 872 3594 2022-01-01T03:22:55Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0139 PCB v1.5 schematic.png 6 874 3599 2022-05-21T03:49:39Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:0139 remote 433MHz transmitter v0.6.ino.zip 6 875 3600 2022-05-21T03:55:22Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0126-iambic-keyer 0 664 3602 3519 2022-06-02T22:52:28Z Admin 1 wikitext text/x-wiki Sending Morse Code is a hobby that is still alive and well. This board uses an ATtiny45 or ATtiny85 microcontroller and can be used with an iambic keyer to send morse code. The code fits in a 4k ATtiny45 or the bigger 8k ATtiny85 Program Memory Flash. I got the idea and code from Jack Welch: http://blog.templaro.com/?p=1315 (code here: https://github.com/dhakajack/jackyack/), who got his idea from Jan Lategahn, DK3LJ who has the original sources here: http://yack.sourceforge.net/ Brief overview of the main features: * keying speed settable from 5 to 50wpm * toggle paddle swap (if dit and dah paddles are wired incorrectly) * chip-generated side tone to drive a small piezo speaker (adjustable pitch from 400-1500Hz or turned off completely) * output TX switch-to-ground using low-power 2N7000 N-Channel FET (toggle inverted operation) * send from 2x pre-recorded memory banks of 100 characters each * 20-second tune-up constant tone * supports Iambic-A, Iambic-B and Ultimatic modes * random callsign trainer * automatic Beacon mode The ATtiny microcontroller runs internally on 8MHz, but has the CLKDIV8 flag set, which makes the program effectively run at 1MHz. These clock settings are factory default for a newly-purchased (empty) ATtiny85 chip so you don't need to set any additional Fuses when programming the code into the microcontroller. ===Version 1=== Initially I wanted to make the keyer on a small board with just through-hole components. [[File:0126-iambic-keyer-pcb-built side.jpg|none|thumb|300px|Iambic Keyer built and ready to go]] [[File:0126-iambic-keyer-oshpark.jpg]] Ready to order from OSH Park: https://oshpark.com/shared_projects/EWy79eAF Parts list: * R1, R2: 10k (1/4W) * C1: 100nF (MKT) * C2, C3, C4: 10nF (MKT) * U1: ATtiny45 or ATtiny85 (pre-programmed, internal oscillator @ 1MHz) * U2: 78L05 * Q1: 2N7000 * header pins, .1" pitch (optional) Gerbers: [[File:0126 Iambic Keyer gerbers.zip]] Arduino Source code: [[File:0126 iambic keyer.zip]] * Note: although the source code is in the Arduino .ino format, it is targeted for the ATtiny microcontroller. In order to program this code, you need to turn your Arduino (e.g. Dueamilanove or Uno) into an In-Circuit Serial Programmer (link: https://create.arduino.cc/projecthub/arjun/programming-attiny85-with-arduino-uno-afb829). Schematic: [[File:DipTrace Schematic - 0126 iambic keyer.png|none|thumb|300px|Iambic keyer schematic]] ===Version 2=== Once I sorted out some minor issues with the code and was confident that this was indeed a neat little project, I decided to try and fit it in a small plastic enclosure. The enclosure I chose had small internal rails, between which a circuit board can be held. I was hoping that the enclosure would be big enough inside to also hold a 9V battery, but this turned out to be a bit of a challenge. What I ended up doing was to make a pair of tabs at one end of the circuit board so it could hold the 9V battery in place. The result is what you see below. When the board is received, the end-tabs need to be snapped off and filed flush for a snug fit in the enclosure. The tabs are then soldered at 90 degree angles. Make sure to leave enough space around the battery for some additional insulation tape as the metal body of a 9V battery is NOT ground(!). I tried various small 9V snap-on tabs, but even the smallest ones are still too thick to fit everything inside the box. Therefore the only way this will work is to solder the power leads directly to the battery. Not ideal, but this way it all just fits. <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-front.jpg|none|thumb|300px|Iambic keyer fully assembled - front view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-back.jpg|none|thumb|300px|Iambic keyer fully assembled - back view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-inside-enclosure.jpg|none|thumb|300px|Iambic keyer - inside the enclosure]]</li> </ul></div> <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom.jpg|none|thumb|300px|PCB 0126 with the tabs still attached]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom-with-tabs.jpg|none|thumb|300px|PCB 0126 with tabs soldered on the back of the board]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 top.jpg|none|thumb|300px|Iambic keyer PCB top view]]</li> </ul></div> (new schematic, not yet posted) (gerber files, not yet posted) (improved source code, not yet posted) BOM <code> 11x male header pins 0.50 eBay 6x female header pins receptacle 0.50 eBay 1x DIP8 ATTiny85 2.00 eBay 2x 1206 10nF cer cap 0.02 669-8410 RS 1x 1206 100nF cer cap 0.02 669-8408 RS 2x 1206 1uF cer cap 0.02 669-8414 RS 2x 1206 10k res 0.01 117-391 RS 1x 1206 BSS138 N-Ch FET 0.24 671-0324 RS 1x SOT223-3 MCP1703-502E/DB LDO 0.91 669-4890 RS 1x Piezo buzzer 3500Hz 0.78 457-011 RS 1x DIP8 IC Socket 0.38 PI6500 Jaycar 1x 1m 16-Way IDC ribbon cable 1.85 WM4502 Jaycar 1x spdt sub-miniature toggle switch 2.95 ST0300 Jaycar 1x small black SPST N/O momentary 3.95 SP0700 Jaycar 1x DC Power 2.5mm Bulkhead connector 2.95 PS0524 Jaycar 1x enclosure 130x68x44mm 3.95 HB6013 Jaycar 2x 3.5mm stereo chassis socket 1.35 PS0132 Jaycar 1x Circuit Board 0126 Iambic Keyer 6.70 OSH Park ------ $29.08 (AUD) </code> ==Sidetone== The keyer uses an internal oscillator for generating a sidetone. It is therefore recommended to use a piezo transducer in the design (do not use a buzzer that produces a tone when a dc voltage is applied). The keyer sidetone is useful for generating beeps when interacting with the keyer menu but it can also serve as audible feedback when the radio you're working with does not produce any tones when triggering the PTT line in CW mode. Enabling or disabling the keyer sidetone, as well as the pitch, can be set from the keyer menu. Here is a typical Morse paddle that can be used with this keyer. [[File:Ame dcp paddle.jpg|none|thumb|200px|AME DCP Paddle]] http://americanmorse.com/dcp.htm Getting started. So you've soldered all the components, connected all the hardware and it's mounted in a box. Now what do you do? The keyer has a few modes of operation. It can only be in one of these modes: * iambic keyer mode * Menu mode * Callsign training mode When the device is first powered up it will output '73' (on the internal speaker only) and start in iambic keyer mode, ready for paddle input. If a paddle is connected you can send dits and dahs by tapping the left or the right paddle. In the menu you can configure common options such as: * swapping the left and right paddle * setting the internal speaker on or off during iambic keyer mode * enabling or disabling the switched output (to key the radio) * swap the switched output (key to GND or key to 5V) * the tone of the CW from the internal speaker * the speed of the CW To enter the menu, press the command button once. It will send '?' ( . . - - . . ) to confirm it is in menu mode. If no paddle activity is sensed within 5 seconds it will time out, send 'SK' ( . . . - . - ) and return back into Iambic keyer mode. While in menu mode, use the paddle to key in the letter of a corresponding menu option to activate it. The full list of options is shown below. The following list of menu options is available: <pre> @section usage Usage After reset in default mode, the keyer operates as regular IAMBIC keyer in IAMBIC A at 15 WPM (words per minute = 60 CPM), with 700 Hz side tone. By default, the transmitter keying signal is positive. @subsection speed Speed Change Speed can be changed by pressing and holding the command key while operating the DIT and DAH paddles. DIT reduces speed while DAH increases speed. The keyer plays an alternating sequence of dit and dah while changing speed without keying the transmitter. @subsection cmode Command mode Pressing the command button without changing speed will switch the keyer into command mode. This will be confirmed with the '?' character. Another press of the same button takes the keyer back into regular keyer mode and will be confirmed by the 'SK' prosign. During command mode the transceiver is never keyed and sidetone is always activated. Further functions can be accessed by keying one-letter commands as listed below. @subsubsection Version V - Version The keyer responds with the current keyer software version number @subsubsection pitch P - Pitch Allows modifying the sidetone pitch to a higher or lower level. A sequence of dits will be played and the pitch can be modified with the dit and dah paddles. If no paddle is touched for 5 seconds, the acknowledgment signal 'R' is sounded and the mode terminates, leaving the user in command mode. @subsubsection reset R - Reset All settings are returned to their default values except for the stored messages in the message buffers. Restored settings include speed and pitch, Paddle Swap, TX level inversion, sidetone and TX keyer settings. @subsubsection tune U - Tune mode The transceiver is keyed for a duration of 20 seconds for tuning purposes. Tuning mode is aborted once either DIT or DAH paddles are touched or the control key is pressed. @subsubsection ia A - IAMBIC A Keyer sets IAMBIC A as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ib B - IAMBIC B Keyer sets IAMBIC B as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ultimatic L - Ultimatic Sets the keyer into ULTIMATIC mode. In Ultimatic mode always the last paddle to be touched is repeated indefinitely when paddles are squeezed @subsubsection dahprio D - DAH priority mode. In squeezed state a sequence of DAHs is sent. Some of the first generation keyers exhibited this behaviour so the chip can simulate that @subsubsection swap X - Paddle swapping DIT and DAH paddles are swapped. An 'R' is sounded to acknowledge the request. @subsubsection side S - Sidetone toggle The built-in sidetone generator setting is toggled (ON -> OFF or OFF -> ON). NOTE: This setting is only of relevance for regular keying mode. Sidetone is always on in command mode. An 'R' is sounded to acknowledge the request. @subsubsection txtog K - TX Keying toggle Toggles the setting of the TX keyer output. In default state the keyer switches the output line when it is in keyer mode. Toggling this setting enables or disables that function. NOTE: Keying is always off in Command mode. An 'R' is sounded to acknowledge the request. @subsubsection farnsworth Z - Set Farnsworth pause Allows setting of an extended inter-character pause in all sending modes, which makes fast keying easier to understand. Note that this of course only influences RECEPTION, not TRANSMISSION. If you desire farnsworth mode in transmission, please manually pause during characters. @subsubsection lvtog I - TX level inverter toggle This function toggles wether the "active" level on the keyer output is VCC or GND. The default is VCC. This setting is dependent on the attached keying circuit. An 'R' is sounded to acknowledge the request. @subsubsection query W - Query current WPM speed Keyer responds with current keying speed in WPM. @subsubsection msgrec 1 and 2 - Record internal messages 1 or 2 The keyer immediately responds with "1" or "2" after which a message up to 100 characters can be keyed at current WPM speed. After 5 seconds of inactivity the message is played back once and then stored in EEPROM. Choosing "1" or "2" but not keying a new message deletes the chosen message buffer content. @subsubsection msgplay E and T - Play back internal messages 1 or 2 The stored messages 1 or 2 are played back with keying enabled (if configured). A press of the command key immediately returns the keyer to keyer mode so a QSO can be started. @subsubsection beacon N - Automatic Beacon The keyer responds with 'N' after which a number between 0 and 9999 can be keyed. After a 5 second timeout the keyer responds by repeating the number and 'R'. Once the keyer returns to keyer mode, the content of message buffer 2 is repeated in intervals of n seconds. The setting is preserved in EEPROM so the chip can be used as a fox hunt keyer. Returning to command mode and entering an interval of 0 (or none at all) stops beacon mode. @subsubsection lock 0 - Lock configuration The 0 command locks or unlocks the main configuration items but not speed, pitch and playback functions. @subsubsection trainer C - Callsign trainer The keyer plays a generated callsign (sidetone only) and the user must repeat it. If it was repeated correctly, 'R' is played and the next callsign is given. If a mistake was sensed, the error prosign (8 dits) is sounded and the current callsign is repeated again for the user to try once more. If nothing is keyed for 10 seconds, the keyer returns to command mode. </pre> e1f305b2b6ba73e00590dc59b162af015da67236 3603 3602 2022-06-02T22:53:49Z Admin 1 wikitext text/x-wiki Sending Morse Code is a hobby that is still alive and well. This board uses an ATtiny45 or ATtiny85 microcontroller and can be used with an iambic keyer to send morse code. The code fits in a 4k ATtiny45 or the bigger 8k ATtiny85 Program Memory Flash. I got the idea and code from Jack Welch: http://blog.templaro.com/?p=1315 (code here: https://github.com/dhakajack/jackyack/), who got his idea from Jan Lategahn, DK3LJ who has the original sources here: http://yack.sourceforge.net/ Brief overview of the main features: * keying speed settable from 5 to 50wpm * toggle paddle swap (if dit and dah paddles are wired incorrectly) * chip-generated side tone to drive a small piezo speaker (adjustable pitch from 400-1500Hz or turned off completely) * output TX switch-to-ground using low-power 2N7000 N-Channel FET (toggle inverted operation) * send from 2x pre-recorded memory banks of 100 characters each * 20-second tune-up constant tone * supports Iambic-A, Iambic-B and Ultimatic modes * random callsign trainer * automatic Beacon mode The ATtiny microcontroller runs internally on 8MHz, but has the CLKDIV8 flag set, which makes the program effectively run at 1MHz. These clock settings are factory default for a newly-purchased (empty) ATtiny85 chip so you don't need to set any additional Fuses when programming the code into the microcontroller. ===Version 1=== Initially I wanted to make the keyer on a small board with just through-hole components. [[File:0126-iambic-keyer-pcb-built side.jpg|none|thumb|300px|Iambic Keyer built and ready to go]] [[File:0126-iambic-keyer-oshpark.jpg]] Ready to order from OSH Park: https://oshpark.com/shared_projects/EWy79eAF Parts list: * R1, R2: 10k (1/4W) * C1: 100nF (MKT) * C2, C3, C4: 10nF (MKT) * U1: ATtiny45 or ATtiny85 (pre-programmed, internal oscillator @ 1MHz) * U2: 78L05 * Q1: 2N7000 * header pins, .1" pitch (optional) Gerbers: [[File:0126 Iambic Keyer gerbers.zip]] Arduino Source code: [[File:0126 iambic keyer.zip]] * Note: although the source code is in the Arduino .ino format, it is targeted for the ATtiny microcontroller. In order to program this code, you need to turn your Arduino (e.g. Dueamilanove or Uno) into an In-Circuit Serial Programmer (link: https://create.arduino.cc/projecthub/arjun/programming-attiny85-with-arduino-uno-afb829). Schematic: [[File:DipTrace Schematic - 0126 iambic keyer.png|none|thumb|300px|Iambic keyer schematic]] ===Version 2=== Once I sorted out some minor issues with the code and was confident that this was indeed a neat little project, I decided to try and fit it in a small plastic enclosure. The enclosure I chose had small internal rails, between which a circuit board can be held. I was hoping that the enclosure would be big enough inside to also hold a 9V battery, but this turned out to be a bit of a challenge. What I ended up doing was to make a pair of tabs at one end of the circuit board so it could hold the 9V battery in place. The result is what you see below. When the board is received, the end-tabs need to be snapped off and filed flush for a snug fit in the enclosure. The tabs are then soldered at 90 degree angles. Make sure to leave enough space around the battery for some additional insulation tape as the metal body of a 9V battery is NOT ground(!). I tried various small 9V snap-on tabs, but even the smallest ones are still too thick to fit everything inside the box. Therefore the only way this will work is to solder the power leads directly to the battery. Not ideal, but this way it all just fits. <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-front.jpg|none|thumb|300px|Iambic keyer fully assembled - front view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-back.jpg|none|thumb|300px|Iambic keyer fully assembled - back view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-inside-enclosure.jpg|none|thumb|300px|Iambic keyer - inside the enclosure]]</li> </ul></div> <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom.jpg|none|thumb|300px|PCB 0126 with the tabs still attached]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom-with-tabs.jpg|none|thumb|300px|PCB 0126 with tabs soldered on the back of the board]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 top.jpg|none|thumb|300px|Iambic keyer PCB top view]]</li> </ul></div> (new schematic, not yet posted) (gerber files, not yet posted) (improved source code, not yet posted) BOM <code> 11x male header pins 0.50 eBay 6x female header pins receptacle 0.50 eBay 1x DIP8 ATTiny85 2.00 eBay 2x 1206 10nF cer cap 0.02 669-8410 RS 1x 1206 100nF cer cap 0.02 669-8408 RS 2x 1206 1uF cer cap 0.02 669-8414 RS 2x 1206 10k res 0.01 117-391 RS 1x 1206 BSS138 N-Ch FET 0.24 671-0324 RS 1x SOT223-3 MCP1703-502E/DB LDO 0.91 669-4890 RS 1x Piezo transducer 3500Hz 0.78 457-011 RS 1x DIP8 IC Socket 0.38 PI6500 Jaycar 1x 1m 16-Way IDC ribbon cable 1.85 WM4502 Jaycar 1x spdt sub-miniature toggle switch 2.95 ST0300 Jaycar 1x small black SPST N/O momentary 3.95 SP0700 Jaycar 1x DC Power 2.5mm Bulkhead connector 2.95 PS0524 Jaycar 1x enclosure 130x68x44mm 3.95 HB6013 Jaycar 2x 3.5mm stereo chassis socket 1.35 PS0132 Jaycar 1x Circuit Board 0126 Iambic Keyer 6.70 OSH Park ------ $29.08 (AUD) (2017 prices) </code> ==Sidetone== The keyer uses an internal oscillator for generating a sidetone. It is therefore recommended to use a piezo transducer in the design (do not use a buzzer that produces a tone when a dc voltage is applied). The keyer sidetone is useful for generating beeps when interacting with the keyer menu but it can also serve as audible feedback when the radio you're working with does not produce any tones when triggering the PTT line in CW mode. Enabling or disabling the keyer sidetone, as well as the pitch, can be set from the keyer menu. Here is a typical Morse paddle that can be used with this keyer. [[File:Ame dcp paddle.jpg|none|thumb|200px|AME DCP Paddle]] http://americanmorse.com/dcp.htm Getting started. So you've soldered all the components, connected all the hardware and it's mounted in a box. Now what do you do? The keyer has a few modes of operation. It can only be in one of these modes: * iambic keyer mode * Menu mode * Callsign training mode When the device is first powered up it will output '73' (on the internal speaker only) and start in iambic keyer mode, ready for paddle input. If a paddle is connected you can send dits and dahs by tapping the left or the right paddle. In the menu you can configure common options such as: * swapping the left and right paddle * setting the internal speaker on or off during iambic keyer mode * enabling or disabling the switched output (to key the radio) * swap the switched output (key to GND or key to 5V) * the tone of the CW from the internal speaker * the speed of the CW To enter the menu, press the command button once. It will send '?' ( . . - - . . ) to confirm it is in menu mode. If no paddle activity is sensed within 5 seconds it will time out, send 'SK' ( . . . - . - ) and return back into Iambic keyer mode. While in menu mode, use the paddle to key in the letter of a corresponding menu option to activate it. The full list of options is shown below. The following list of menu options is available: <pre> @section usage Usage After reset in default mode, the keyer operates as regular IAMBIC keyer in IAMBIC A at 15 WPM (words per minute = 60 CPM), with 700 Hz side tone. By default, the transmitter keying signal is positive. @subsection speed Speed Change Speed can be changed by pressing and holding the command key while operating the DIT and DAH paddles. DIT reduces speed while DAH increases speed. The keyer plays an alternating sequence of dit and dah while changing speed without keying the transmitter. @subsection cmode Command mode Pressing the command button without changing speed will switch the keyer into command mode. This will be confirmed with the '?' character. Another press of the same button takes the keyer back into regular keyer mode and will be confirmed by the 'SK' prosign. During command mode the transceiver is never keyed and sidetone is always activated. Further functions can be accessed by keying one-letter commands as listed below. @subsubsection Version V - Version The keyer responds with the current keyer software version number @subsubsection pitch P - Pitch Allows modifying the sidetone pitch to a higher or lower level. A sequence of dits will be played and the pitch can be modified with the dit and dah paddles. If no paddle is touched for 5 seconds, the acknowledgment signal 'R' is sounded and the mode terminates, leaving the user in command mode. @subsubsection reset R - Reset All settings are returned to their default values except for the stored messages in the message buffers. Restored settings include speed and pitch, Paddle Swap, TX level inversion, sidetone and TX keyer settings. @subsubsection tune U - Tune mode The transceiver is keyed for a duration of 20 seconds for tuning purposes. Tuning mode is aborted once either DIT or DAH paddles are touched or the control key is pressed. @subsubsection ia A - IAMBIC A Keyer sets IAMBIC A as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ib B - IAMBIC B Keyer sets IAMBIC B as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ultimatic L - Ultimatic Sets the keyer into ULTIMATIC mode. In Ultimatic mode always the last paddle to be touched is repeated indefinitely when paddles are squeezed @subsubsection dahprio D - DAH priority mode. In squeezed state a sequence of DAHs is sent. Some of the first generation keyers exhibited this behaviour so the chip can simulate that @subsubsection swap X - Paddle swapping DIT and DAH paddles are swapped. An 'R' is sounded to acknowledge the request. @subsubsection side S - Sidetone toggle The built-in sidetone generator setting is toggled (ON -> OFF or OFF -> ON). NOTE: This setting is only of relevance for regular keying mode. Sidetone is always on in command mode. An 'R' is sounded to acknowledge the request. @subsubsection txtog K - TX Keying toggle Toggles the setting of the TX keyer output. In default state the keyer switches the output line when it is in keyer mode. Toggling this setting enables or disables that function. NOTE: Keying is always off in Command mode. An 'R' is sounded to acknowledge the request. @subsubsection farnsworth Z - Set Farnsworth pause Allows setting of an extended inter-character pause in all sending modes, which makes fast keying easier to understand. Note that this of course only influences RECEPTION, not TRANSMISSION. If you desire farnsworth mode in transmission, please manually pause during characters. @subsubsection lvtog I - TX level inverter toggle This function toggles wether the "active" level on the keyer output is VCC or GND. The default is VCC. This setting is dependent on the attached keying circuit. An 'R' is sounded to acknowledge the request. @subsubsection query W - Query current WPM speed Keyer responds with current keying speed in WPM. @subsubsection msgrec 1 and 2 - Record internal messages 1 or 2 The keyer immediately responds with "1" or "2" after which a message up to 100 characters can be keyed at current WPM speed. After 5 seconds of inactivity the message is played back once and then stored in EEPROM. Choosing "1" or "2" but not keying a new message deletes the chosen message buffer content. @subsubsection msgplay E and T - Play back internal messages 1 or 2 The stored messages 1 or 2 are played back with keying enabled (if configured). A press of the command key immediately returns the keyer to keyer mode so a QSO can be started. @subsubsection beacon N - Automatic Beacon The keyer responds with 'N' after which a number between 0 and 9999 can be keyed. After a 5 second timeout the keyer responds by repeating the number and 'R'. Once the keyer returns to keyer mode, the content of message buffer 2 is repeated in intervals of n seconds. The setting is preserved in EEPROM so the chip can be used as a fox hunt keyer. Returning to command mode and entering an interval of 0 (or none at all) stops beacon mode. @subsubsection lock 0 - Lock configuration The 0 command locks or unlocks the main configuration items but not speed, pitch and playback functions. @subsubsection trainer C - Callsign trainer The keyer plays a generated callsign (sidetone only) and the user must repeat it. If it was repeated correctly, 'R' is played and the next callsign is given. If a mistake was sensed, the error prosign (8 dits) is sounded and the current callsign is repeated again for the user to try once more. If nothing is keyed for 10 seconds, the keyer returns to command mode. </pre> 9eeeb4ca0a838f548eb586a261d28459c37d1957 3604 3603 2022-06-02T22:54:25Z Admin 1 wikitext text/x-wiki Sending Morse Code is a hobby that is still alive and well. This board uses an ATtiny45 or ATtiny85 microcontroller and can be used with an iambic keyer to send morse code. The code fits in a 4k ATtiny45 or the bigger 8k ATtiny85 Program Memory Flash. I got the idea and code from Jack Welch: http://blog.templaro.com/?p=1315 (code here: https://github.com/dhakajack/jackyack/), who got his idea from Jan Lategahn, DK3LJ who has the original sources here: http://yack.sourceforge.net/ Brief overview of the main features: * keying speed settable from 5 to 50wpm * toggle paddle swap (if dit and dah paddles are wired incorrectly) * chip-generated side tone to drive a small piezo speaker (adjustable pitch from 400-1500Hz or turned off completely) * output TX switch-to-ground using low-power 2N7000 N-Channel FET (toggle inverted operation) * send from 2x pre-recorded memory banks of 100 characters each * 20-second tune-up constant tone * supports Iambic-A, Iambic-B and Ultimatic modes * random callsign trainer * automatic Beacon mode The ATtiny microcontroller runs internally on 8MHz, but has the CLKDIV8 flag set, which makes the program effectively run at 1MHz. These clock settings are factory default for a newly-purchased (empty) ATtiny85 chip so you don't need to set any additional Fuses when programming the code into the microcontroller. ===Version 1=== Initially I wanted to make the keyer on a small board with just through-hole components. [[File:0126-iambic-keyer-pcb-built side.jpg|none|thumb|300px|Iambic Keyer built and ready to go]] [[File:0126-iambic-keyer-oshpark.jpg]] Ready to order from OSH Park: https://oshpark.com/shared_projects/EWy79eAF Parts list: * R1, R2: 10k (1/4W) * C1: 100nF (MKT) * C2, C3, C4: 10nF (MKT) * U1: ATtiny45 or ATtiny85 (pre-programmed, internal oscillator @ 1MHz) * U2: 78L05 * Q1: 2N7000 * header pins, .1" pitch (optional) Gerbers: [[File:0126 Iambic Keyer gerbers.zip]] Arduino Source code: [[File:0126 iambic keyer.zip]] * Note: although the source code is in the Arduino .ino format, it is targeted for the ATtiny microcontroller. In order to program this code, you need to turn your Arduino (e.g. Dueamilanove or Uno) into an In-Circuit Serial Programmer (link: https://create.arduino.cc/projecthub/arjun/programming-attiny85-with-arduino-uno-afb829). Schematic: [[File:DipTrace Schematic - 0126 iambic keyer.png|none|thumb|300px|Iambic keyer schematic]] ===Version 2=== Once I sorted out some minor issues with the code and was confident that this was indeed a neat little project, I decided to try and fit it in a small plastic enclosure. The enclosure I chose had small internal rails, between which a circuit board can be held. I was hoping that the enclosure would be big enough inside to also hold a 9V battery, but this turned out to be a bit of a challenge. What I ended up doing was to make a pair of tabs at one end of the circuit board so it could hold the 9V battery in place. The result is what you see below. When the board is received, the end-tabs need to be snapped off and filed flush for a snug fit in the enclosure. The tabs are then soldered at 90 degree angles. Make sure to leave enough space around the battery for some additional insulation tape as the metal body of a 9V battery is NOT ground(!). I tried various small 9V snap-on tabs, but even the smallest ones are still too thick to fit everything inside the box. Therefore the only way this will work is to solder the power leads directly to the battery. Not ideal, but this way it all just fits. <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-front.jpg|none|thumb|300px|Iambic keyer fully assembled - front view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-back.jpg|none|thumb|300px|Iambic keyer fully assembled - back view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-inside-enclosure.jpg|none|thumb|300px|Iambic keyer - inside the enclosure]]</li> </ul></div> <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom.jpg|none|thumb|300px|PCB 0126 with the tabs still attached]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom-with-tabs.jpg|none|thumb|300px|PCB 0126 with tabs soldered on the back of the board]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 top.jpg|none|thumb|300px|Iambic keyer PCB top view]]</li> </ul></div> (new schematic, not yet posted) (gerber files, not yet posted) (improved source code, not yet posted) BOM <code> 11x male header pins 0.50 eBay 6x female header pins receptacle 0.50 eBay 1x DIP8 ATTiny85 2.00 eBay 2x 1206 10nF cer cap 0.02 669-8410 RS 1x 1206 100nF cer cap 0.02 669-8408 RS 2x 1206 1uF cer cap 0.02 669-8414 RS 2x 1206 10k res 0.01 117-391 RS 1x 1206 BSS138 N-Ch FET 0.24 671-0324 RS 1x SOT223-3 MCP1703-502E/DB LDO 0.91 669-4890 RS 1x Piezo transducer 3500Hz 0.78 457-011 RS 1x DIP8 IC Socket 0.38 PI6500 Jaycar 1x 1m 16-Way IDC ribbon cable 1.85 WM4502 Jaycar 1x spdt sub-miniature toggle switch 2.95 ST0300 Jaycar 1x small black SPST N/O momentary 3.95 SP0700 Jaycar 1x DC Power 2.5mm Bulkhead connector 2.95 PS0524 Jaycar 1x enclosure 130x68x44mm 3.95 HB6013 Jaycar 2x 3.5mm stereo chassis socket 1.35 PS0132 Jaycar 1x Circuit Board 0126 Iambic Keyer 6.70 OSH Park ------ $29.08 (AUD) (2017 prices) </code> ===Sidetone=== The keyer uses an internal oscillator for generating a sidetone. It is therefore recommended to use a piezo transducer in the design (do not use a buzzer that produces a tone when a dc voltage is applied). The keyer sidetone is useful for generating beeps when interacting with the keyer menu but it can also serve as audible feedback when the radio you're working with does not produce any tones when triggering the PTT line in CW mode. Enabling or disabling the keyer sidetone, as well as the pitch, can be set from the keyer menu. Here is a typical Morse paddle that can be used with this keyer. [[File:Ame dcp paddle.jpg|none|thumb|200px|AME DCP Paddle]] http://americanmorse.com/dcp.htm Getting started. So you've soldered all the components, connected all the hardware and it's mounted in a box. Now what do you do? The keyer has a few modes of operation. It can only be in one of these modes: * iambic keyer mode * Menu mode * Callsign training mode When the device is first powered up it will output '73' (on the internal speaker only) and start in iambic keyer mode, ready for paddle input. If a paddle is connected you can send dits and dahs by tapping the left or the right paddle. In the menu you can configure common options such as: * swapping the left and right paddle * setting the internal speaker on or off during iambic keyer mode * enabling or disabling the switched output (to key the radio) * swap the switched output (key to GND or key to 5V) * the tone of the CW from the internal speaker * the speed of the CW To enter the menu, press the command button once. It will send '?' ( . . - - . . ) to confirm it is in menu mode. If no paddle activity is sensed within 5 seconds it will time out, send 'SK' ( . . . - . - ) and return back into Iambic keyer mode. While in menu mode, use the paddle to key in the letter of a corresponding menu option to activate it. The full list of options is shown below. The following list of menu options is available: <pre> @section usage Usage After reset in default mode, the keyer operates as regular IAMBIC keyer in IAMBIC A at 15 WPM (words per minute = 60 CPM), with 700 Hz side tone. By default, the transmitter keying signal is positive. @subsection speed Speed Change Speed can be changed by pressing and holding the command key while operating the DIT and DAH paddles. DIT reduces speed while DAH increases speed. The keyer plays an alternating sequence of dit and dah while changing speed without keying the transmitter. @subsection cmode Command mode Pressing the command button without changing speed will switch the keyer into command mode. This will be confirmed with the '?' character. Another press of the same button takes the keyer back into regular keyer mode and will be confirmed by the 'SK' prosign. During command mode the transceiver is never keyed and sidetone is always activated. Further functions can be accessed by keying one-letter commands as listed below. @subsubsection Version V - Version The keyer responds with the current keyer software version number @subsubsection pitch P - Pitch Allows modifying the sidetone pitch to a higher or lower level. A sequence of dits will be played and the pitch can be modified with the dit and dah paddles. If no paddle is touched for 5 seconds, the acknowledgment signal 'R' is sounded and the mode terminates, leaving the user in command mode. @subsubsection reset R - Reset All settings are returned to their default values except for the stored messages in the message buffers. Restored settings include speed and pitch, Paddle Swap, TX level inversion, sidetone and TX keyer settings. @subsubsection tune U - Tune mode The transceiver is keyed for a duration of 20 seconds for tuning purposes. Tuning mode is aborted once either DIT or DAH paddles are touched or the control key is pressed. @subsubsection ia A - IAMBIC A Keyer sets IAMBIC A as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ib B - IAMBIC B Keyer sets IAMBIC B as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ultimatic L - Ultimatic Sets the keyer into ULTIMATIC mode. In Ultimatic mode always the last paddle to be touched is repeated indefinitely when paddles are squeezed @subsubsection dahprio D - DAH priority mode. In squeezed state a sequence of DAHs is sent. Some of the first generation keyers exhibited this behaviour so the chip can simulate that @subsubsection swap X - Paddle swapping DIT and DAH paddles are swapped. An 'R' is sounded to acknowledge the request. @subsubsection side S - Sidetone toggle The built-in sidetone generator setting is toggled (ON -> OFF or OFF -> ON). NOTE: This setting is only of relevance for regular keying mode. Sidetone is always on in command mode. An 'R' is sounded to acknowledge the request. @subsubsection txtog K - TX Keying toggle Toggles the setting of the TX keyer output. In default state the keyer switches the output line when it is in keyer mode. Toggling this setting enables or disables that function. NOTE: Keying is always off in Command mode. An 'R' is sounded to acknowledge the request. @subsubsection farnsworth Z - Set Farnsworth pause Allows setting of an extended inter-character pause in all sending modes, which makes fast keying easier to understand. Note that this of course only influences RECEPTION, not TRANSMISSION. If you desire farnsworth mode in transmission, please manually pause during characters. @subsubsection lvtog I - TX level inverter toggle This function toggles wether the "active" level on the keyer output is VCC or GND. The default is VCC. This setting is dependent on the attached keying circuit. An 'R' is sounded to acknowledge the request. @subsubsection query W - Query current WPM speed Keyer responds with current keying speed in WPM. @subsubsection msgrec 1 and 2 - Record internal messages 1 or 2 The keyer immediately responds with "1" or "2" after which a message up to 100 characters can be keyed at current WPM speed. After 5 seconds of inactivity the message is played back once and then stored in EEPROM. Choosing "1" or "2" but not keying a new message deletes the chosen message buffer content. @subsubsection msgplay E and T - Play back internal messages 1 or 2 The stored messages 1 or 2 are played back with keying enabled (if configured). A press of the command key immediately returns the keyer to keyer mode so a QSO can be started. @subsubsection beacon N - Automatic Beacon The keyer responds with 'N' after which a number between 0 and 9999 can be keyed. After a 5 second timeout the keyer responds by repeating the number and 'R'. Once the keyer returns to keyer mode, the content of message buffer 2 is repeated in intervals of n seconds. The setting is preserved in EEPROM so the chip can be used as a fox hunt keyer. Returning to command mode and entering an interval of 0 (or none at all) stops beacon mode. @subsubsection lock 0 - Lock configuration The 0 command locks or unlocks the main configuration items but not speed, pitch and playback functions. @subsubsection trainer C - Callsign trainer The keyer plays a generated callsign (sidetone only) and the user must repeat it. If it was repeated correctly, 'R' is played and the next callsign is given. If a mistake was sensed, the error prosign (8 dits) is sounded and the current callsign is repeated again for the user to try once more. If nothing is keyed for 10 seconds, the keyer returns to command mode. </pre> 14e7c0919f966dea7326374adc2f5d68e7e86824 3605 3604 2022-06-02T22:55:10Z Admin 1 wikitext text/x-wiki Sending Morse Code is a hobby that is still alive and well. This board uses an ATtiny45 or ATtiny85 microcontroller and can be used with an iambic keyer to send morse code. The code fits in a 4k ATtiny45 or the bigger 8k ATtiny85 Program Memory Flash. I got the idea and code from Jack Welch: http://blog.templaro.com/?p=1315 (code here: https://github.com/dhakajack/jackyack/), who got his idea from Jan Lategahn, DK3LJ who has the original sources here: http://yack.sourceforge.net/ Brief overview of the main features: * keying speed settable from 5 to 50wpm * toggle paddle swap (if dit and dah paddles are wired incorrectly) * chip-generated side tone to drive a small piezo speaker (adjustable pitch from 400-1500Hz or turned off completely) * output TX switch-to-ground using low-power 2N7000 N-Channel FET (toggle inverted operation) * send from 2x pre-recorded memory banks of 100 characters each * 20-second tune-up constant tone * supports Iambic-A, Iambic-B and Ultimatic modes * random callsign trainer * automatic Beacon mode The ATtiny microcontroller runs internally on 8MHz, but has the CLKDIV8 flag set, which makes the program effectively run at 1MHz. These clock settings are factory default for a newly-purchased (empty) ATtiny85 chip so you don't need to set any additional Fuses when programming the code into the microcontroller. ===Version 1=== Initially I wanted to make the keyer on a small board with just through-hole components. [[File:0126-iambic-keyer-pcb-built side.jpg|none|thumb|300px|Iambic Keyer built and ready to go]] [[File:0126-iambic-keyer-oshpark.jpg]] Ready to order from OSH Park: https://oshpark.com/shared_projects/EWy79eAF Parts list: * R1, R2: 10k (1/4W) * C1: 100nF (MKT) * C2, C3, C4: 10nF (MKT) * U1: ATtiny45 or ATtiny85 (pre-programmed, internal oscillator @ 1MHz) * U2: 78L05 * Q1: 2N7000 * header pins, .1" pitch (optional) Gerbers: [[File:0126 Iambic Keyer gerbers.zip]] Arduino Source code: [[File:0126 iambic keyer.zip]] * Note: although the source code is in the Arduino .ino format, it is targeted for the ATtiny microcontroller. In order to program this code, you need to turn your Arduino (e.g. Dueamilanove or Uno) into an In-Circuit Serial Programmer (link: https://create.arduino.cc/projecthub/arjun/programming-attiny85-with-arduino-uno-afb829). Schematic: [[File:DipTrace Schematic - 0126 iambic keyer.png|none|thumb|300px|Iambic keyer schematic]] ===Version 2=== Once I sorted out some minor issues with the code and was confident that this was indeed a neat little project, I decided to try and fit it in a small plastic enclosure. The enclosure I chose had small internal rails, between which a circuit board can be held. I was hoping that the enclosure would be big enough inside to also hold a 9V battery, but this turned out to be a bit of a challenge. What I ended up doing was to make a pair of tabs at one end of the circuit board so it could hold the 9V battery in place. The result is what you see below. When the board is received, the end-tabs need to be snapped off and filed flush for a snug fit in the enclosure. The tabs are then soldered at 90 degree angles. Make sure to leave enough space around the battery for some additional insulation tape as the metal body of a 9V battery is NOT ground(!). I tried various small 9V snap-on tabs, but even the smallest ones are still too thick to fit everything inside the box. Therefore the only way this will work is to solder the power leads directly to the battery. Not ideal, but this way it all just fits. <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-front.jpg|none|thumb|300px|Iambic keyer fully assembled - front view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-back.jpg|none|thumb|300px|Iambic keyer fully assembled - back view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-inside-enclosure.jpg|none|thumb|300px|Iambic keyer - inside the enclosure]]</li> </ul></div> <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom.jpg|none|thumb|300px|PCB 0126 with the tabs still attached]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom-with-tabs.jpg|none|thumb|300px|PCB 0126 with tabs soldered on the back of the board]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 top.jpg|none|thumb|300px|Iambic keyer PCB top view]]</li> </ul></div> (new schematic, not yet posted) (gerber files, not yet posted) (improved source code, not yet posted) BOM <code> 11x male header pins 0.50 eBay 6x female header pins receptacle 0.50 eBay 1x DIP8 ATTiny85 2.00 eBay 2x 1206 10nF cer cap 0.02 669-8410 RS 1x 1206 100nF cer cap 0.02 669-8408 RS 2x 1206 1uF cer cap 0.02 669-8414 RS 2x 1206 10k res 0.01 117-391 RS 1x 1206 BSS138 N-Ch FET 0.24 671-0324 RS 1x SOT223-3 MCP1703-502E/DB LDO 0.91 669-4890 RS 1x Piezo transducer 3500Hz 0.78 457-011 RS 1x DIP8 IC Socket 0.38 PI6500 Jaycar 1x 1m 16-Way IDC ribbon cable 1.85 WM4502 Jaycar 1x spdt sub-miniature toggle switch 2.95 ST0300 Jaycar 1x small black SPST N/O momentary 3.95 SP0700 Jaycar 1x DC Power 2.5mm Bulkhead connector 2.95 PS0524 Jaycar 1x enclosure 130x68x44mm 3.95 HB6013 Jaycar 2x 3.5mm stereo chassis socket 1.35 PS0132 Jaycar 1x Circuit Board 0126 Iambic Keyer 6.70 OSH Park ------ $29.08 (AUD) (2017 prices) </code> ===Sidetone=== The keyer uses an internal oscillator for generating a sidetone. It is therefore recommended to use a piezo transducer in the design (do not use a buzzer that produces a tone when a dc voltage is applied). The keyer sidetone is useful for generating beeps when interacting with the keyer menu but it can also serve as audible feedback when the radio you're working with does not produce any tones when triggering the PTT line in CW mode. Enabling or disabling the keyer sidetone, as well as changing the pitch, can be set from the keyer menu. Here is a typical Morse paddle that can be used with this keyer. [[File:Ame dcp paddle.jpg|none|thumb|200px|AME DCP Paddle]] http://americanmorse.com/dcp.htm Getting started. So you've soldered all the components, connected all the hardware and it's mounted in a box. Now what do you do? The keyer has a few modes of operation. It can only be in one of these modes: * iambic keyer mode * Menu mode * Callsign training mode When the device is first powered up it will output '73' (on the internal speaker only) and start in iambic keyer mode, ready for paddle input. If a paddle is connected you can send dits and dahs by tapping the left or the right paddle. In the menu you can configure common options such as: * swapping the left and right paddle * setting the internal speaker on or off during iambic keyer mode * enabling or disabling the switched output (to key the radio) * swap the switched output (key to GND or key to 5V) * the tone of the CW from the internal speaker * the speed of the CW To enter the menu, press the command button once. It will send '?' ( . . - - . . ) to confirm it is in menu mode. If no paddle activity is sensed within 5 seconds it will time out, send 'SK' ( . . . - . - ) and return back into Iambic keyer mode. While in menu mode, use the paddle to key in the letter of a corresponding menu option to activate it. The full list of options is shown below. The following list of menu options is available: <pre> @section usage Usage After reset in default mode, the keyer operates as regular IAMBIC keyer in IAMBIC A at 15 WPM (words per minute = 60 CPM), with 700 Hz side tone. By default, the transmitter keying signal is positive. @subsection speed Speed Change Speed can be changed by pressing and holding the command key while operating the DIT and DAH paddles. DIT reduces speed while DAH increases speed. The keyer plays an alternating sequence of dit and dah while changing speed without keying the transmitter. @subsection cmode Command mode Pressing the command button without changing speed will switch the keyer into command mode. This will be confirmed with the '?' character. Another press of the same button takes the keyer back into regular keyer mode and will be confirmed by the 'SK' prosign. During command mode the transceiver is never keyed and sidetone is always activated. Further functions can be accessed by keying one-letter commands as listed below. @subsubsection Version V - Version The keyer responds with the current keyer software version number @subsubsection pitch P - Pitch Allows modifying the sidetone pitch to a higher or lower level. A sequence of dits will be played and the pitch can be modified with the dit and dah paddles. If no paddle is touched for 5 seconds, the acknowledgment signal 'R' is sounded and the mode terminates, leaving the user in command mode. @subsubsection reset R - Reset All settings are returned to their default values except for the stored messages in the message buffers. Restored settings include speed and pitch, Paddle Swap, TX level inversion, sidetone and TX keyer settings. @subsubsection tune U - Tune mode The transceiver is keyed for a duration of 20 seconds for tuning purposes. Tuning mode is aborted once either DIT or DAH paddles are touched or the control key is pressed. @subsubsection ia A - IAMBIC A Keyer sets IAMBIC A as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ib B - IAMBIC B Keyer sets IAMBIC B as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ultimatic L - Ultimatic Sets the keyer into ULTIMATIC mode. In Ultimatic mode always the last paddle to be touched is repeated indefinitely when paddles are squeezed @subsubsection dahprio D - DAH priority mode. In squeezed state a sequence of DAHs is sent. Some of the first generation keyers exhibited this behaviour so the chip can simulate that @subsubsection swap X - Paddle swapping DIT and DAH paddles are swapped. An 'R' is sounded to acknowledge the request. @subsubsection side S - Sidetone toggle The built-in sidetone generator setting is toggled (ON -> OFF or OFF -> ON). NOTE: This setting is only of relevance for regular keying mode. Sidetone is always on in command mode. An 'R' is sounded to acknowledge the request. @subsubsection txtog K - TX Keying toggle Toggles the setting of the TX keyer output. In default state the keyer switches the output line when it is in keyer mode. Toggling this setting enables or disables that function. NOTE: Keying is always off in Command mode. An 'R' is sounded to acknowledge the request. @subsubsection farnsworth Z - Set Farnsworth pause Allows setting of an extended inter-character pause in all sending modes, which makes fast keying easier to understand. Note that this of course only influences RECEPTION, not TRANSMISSION. If you desire farnsworth mode in transmission, please manually pause during characters. @subsubsection lvtog I - TX level inverter toggle This function toggles wether the "active" level on the keyer output is VCC or GND. The default is VCC. This setting is dependent on the attached keying circuit. An 'R' is sounded to acknowledge the request. @subsubsection query W - Query current WPM speed Keyer responds with current keying speed in WPM. @subsubsection msgrec 1 and 2 - Record internal messages 1 or 2 The keyer immediately responds with "1" or "2" after which a message up to 100 characters can be keyed at current WPM speed. After 5 seconds of inactivity the message is played back once and then stored in EEPROM. Choosing "1" or "2" but not keying a new message deletes the chosen message buffer content. @subsubsection msgplay E and T - Play back internal messages 1 or 2 The stored messages 1 or 2 are played back with keying enabled (if configured). A press of the command key immediately returns the keyer to keyer mode so a QSO can be started. @subsubsection beacon N - Automatic Beacon The keyer responds with 'N' after which a number between 0 and 9999 can be keyed. After a 5 second timeout the keyer responds by repeating the number and 'R'. Once the keyer returns to keyer mode, the content of message buffer 2 is repeated in intervals of n seconds. The setting is preserved in EEPROM so the chip can be used as a fox hunt keyer. Returning to command mode and entering an interval of 0 (or none at all) stops beacon mode. @subsubsection lock 0 - Lock configuration The 0 command locks or unlocks the main configuration items but not speed, pitch and playback functions. @subsubsection trainer C - Callsign trainer The keyer plays a generated callsign (sidetone only) and the user must repeat it. If it was repeated correctly, 'R' is played and the next callsign is given. If a mistake was sensed, the error prosign (8 dits) is sounded and the current callsign is repeated again for the user to try once more. If nothing is keyed for 10 seconds, the keyer returns to command mode. </pre> 73e2f53591e2f412c2db2daea9510af35ac19720 3606 3605 2022-06-02T22:55:45Z Admin 1 wikitext text/x-wiki Sending Morse Code is a hobby that is still alive and well. This board uses an ATtiny45 or ATtiny85 microcontroller and can be used with an iambic keyer to send morse code. The code fits in a 4k ATtiny45 or the bigger 8k ATtiny85 Program Memory Flash. I got the idea and code from Jack Welch: http://blog.templaro.com/?p=1315 (code here: https://github.com/dhakajack/jackyack/), who got his idea from Jan Lategahn, DK3LJ who has the original sources here: http://yack.sourceforge.net/ Brief overview of the main features: * keying speed settable from 5 to 50wpm * toggle paddle swap (if dit and dah paddles are wired incorrectly) * chip-generated side tone to drive a small piezo transducer (adjustable pitch from 400-1500Hz or turned off completely) * output TX switch-to-ground using low-power 2N7000 N-Channel FET (toggle inverted operation) * send from 2x pre-recorded memory banks of 100 characters each * 20-second tune-up constant tone * supports Iambic-A, Iambic-B and Ultimatic modes * random callsign trainer * automatic Beacon mode The ATtiny microcontroller runs internally on 8MHz, but has the CLKDIV8 flag set, which makes the program effectively run at 1MHz. These clock settings are factory default for a newly-purchased (empty) ATtiny85 chip so you don't need to set any additional Fuses when programming the code into the microcontroller. ===Version 1=== Initially I wanted to make the keyer on a small board with just through-hole components. [[File:0126-iambic-keyer-pcb-built side.jpg|none|thumb|300px|Iambic Keyer built and ready to go]] [[File:0126-iambic-keyer-oshpark.jpg]] Ready to order from OSH Park: https://oshpark.com/shared_projects/EWy79eAF Parts list: * R1, R2: 10k (1/4W) * C1: 100nF (MKT) * C2, C3, C4: 10nF (MKT) * U1: ATtiny45 or ATtiny85 (pre-programmed, internal oscillator @ 1MHz) * U2: 78L05 * Q1: 2N7000 * header pins, .1" pitch (optional) Gerbers: [[File:0126 Iambic Keyer gerbers.zip]] Arduino Source code: [[File:0126 iambic keyer.zip]] * Note: although the source code is in the Arduino .ino format, it is targeted for the ATtiny microcontroller. In order to program this code, you need to turn your Arduino (e.g. Dueamilanove or Uno) into an In-Circuit Serial Programmer (link: https://create.arduino.cc/projecthub/arjun/programming-attiny85-with-arduino-uno-afb829). Schematic: [[File:DipTrace Schematic - 0126 iambic keyer.png|none|thumb|300px|Iambic keyer schematic]] ===Version 2=== Once I sorted out some minor issues with the code and was confident that this was indeed a neat little project, I decided to try and fit it in a small plastic enclosure. The enclosure I chose had small internal rails, between which a circuit board can be held. I was hoping that the enclosure would be big enough inside to also hold a 9V battery, but this turned out to be a bit of a challenge. What I ended up doing was to make a pair of tabs at one end of the circuit board so it could hold the 9V battery in place. The result is what you see below. When the board is received, the end-tabs need to be snapped off and filed flush for a snug fit in the enclosure. The tabs are then soldered at 90 degree angles. Make sure to leave enough space around the battery for some additional insulation tape as the metal body of a 9V battery is NOT ground(!). I tried various small 9V snap-on tabs, but even the smallest ones are still too thick to fit everything inside the box. Therefore the only way this will work is to solder the power leads directly to the battery. Not ideal, but this way it all just fits. <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-front.jpg|none|thumb|300px|Iambic keyer fully assembled - front view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer enclosure-back.jpg|none|thumb|300px|Iambic keyer fully assembled - back view]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-inside-enclosure.jpg|none|thumb|300px|Iambic keyer - inside the enclosure]]</li> </ul></div> <div><ul> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom.jpg|none|thumb|300px|PCB 0126 with the tabs still attached]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 bottom-with-tabs.jpg|none|thumb|300px|PCB 0126 with tabs soldered on the back of the board]]</li> <li style="display: inline-block;">[[File:0126-iambic-keyer-pcb v0.2 top.jpg|none|thumb|300px|Iambic keyer PCB top view]]</li> </ul></div> (new schematic, not yet posted) (gerber files, not yet posted) (improved source code, not yet posted) BOM <code> 11x male header pins 0.50 eBay 6x female header pins receptacle 0.50 eBay 1x DIP8 ATTiny85 2.00 eBay 2x 1206 10nF cer cap 0.02 669-8410 RS 1x 1206 100nF cer cap 0.02 669-8408 RS 2x 1206 1uF cer cap 0.02 669-8414 RS 2x 1206 10k res 0.01 117-391 RS 1x 1206 BSS138 N-Ch FET 0.24 671-0324 RS 1x SOT223-3 MCP1703-502E/DB LDO 0.91 669-4890 RS 1x Piezo transducer 3500Hz 0.78 457-011 RS 1x DIP8 IC Socket 0.38 PI6500 Jaycar 1x 1m 16-Way IDC ribbon cable 1.85 WM4502 Jaycar 1x spdt sub-miniature toggle switch 2.95 ST0300 Jaycar 1x small black SPST N/O momentary 3.95 SP0700 Jaycar 1x DC Power 2.5mm Bulkhead connector 2.95 PS0524 Jaycar 1x enclosure 130x68x44mm 3.95 HB6013 Jaycar 2x 3.5mm stereo chassis socket 1.35 PS0132 Jaycar 1x Circuit Board 0126 Iambic Keyer 6.70 OSH Park ------ $29.08 (AUD) (2017 prices) </code> ===Sidetone=== The keyer uses an internal oscillator for generating a sidetone. It is therefore recommended to use a piezo transducer in the design (do not use a buzzer that produces a tone when a dc voltage is applied). The keyer sidetone is useful for generating beeps when interacting with the keyer menu but it can also serve as audible feedback when the radio you're working with does not produce any tones when triggering the PTT line in CW mode. Enabling or disabling the keyer sidetone, as well as changing the pitch, can be set from the keyer menu. Here is a typical Morse paddle that can be used with this keyer. [[File:Ame dcp paddle.jpg|none|thumb|200px|AME DCP Paddle]] http://americanmorse.com/dcp.htm Getting started. So you've soldered all the components, connected all the hardware and it's mounted in a box. Now what do you do? The keyer has a few modes of operation. It can only be in one of these modes: * iambic keyer mode * Menu mode * Callsign training mode When the device is first powered up it will output '73' (on the internal speaker only) and start in iambic keyer mode, ready for paddle input. If a paddle is connected you can send dits and dahs by tapping the left or the right paddle. In the menu you can configure common options such as: * swapping the left and right paddle * setting the internal speaker on or off during iambic keyer mode * enabling or disabling the switched output (to key the radio) * swap the switched output (key to GND or key to 5V) * the tone of the CW from the internal speaker * the speed of the CW To enter the menu, press the command button once. It will send '?' ( . . - - . . ) to confirm it is in menu mode. If no paddle activity is sensed within 5 seconds it will time out, send 'SK' ( . . . - . - ) and return back into Iambic keyer mode. While in menu mode, use the paddle to key in the letter of a corresponding menu option to activate it. The full list of options is shown below. The following list of menu options is available: <pre> @section usage Usage After reset in default mode, the keyer operates as regular IAMBIC keyer in IAMBIC A at 15 WPM (words per minute = 60 CPM), with 700 Hz side tone. By default, the transmitter keying signal is positive. @subsection speed Speed Change Speed can be changed by pressing and holding the command key while operating the DIT and DAH paddles. DIT reduces speed while DAH increases speed. The keyer plays an alternating sequence of dit and dah while changing speed without keying the transmitter. @subsection cmode Command mode Pressing the command button without changing speed will switch the keyer into command mode. This will be confirmed with the '?' character. Another press of the same button takes the keyer back into regular keyer mode and will be confirmed by the 'SK' prosign. During command mode the transceiver is never keyed and sidetone is always activated. Further functions can be accessed by keying one-letter commands as listed below. @subsubsection Version V - Version The keyer responds with the current keyer software version number @subsubsection pitch P - Pitch Allows modifying the sidetone pitch to a higher or lower level. A sequence of dits will be played and the pitch can be modified with the dit and dah paddles. If no paddle is touched for 5 seconds, the acknowledgment signal 'R' is sounded and the mode terminates, leaving the user in command mode. @subsubsection reset R - Reset All settings are returned to their default values except for the stored messages in the message buffers. Restored settings include speed and pitch, Paddle Swap, TX level inversion, sidetone and TX keyer settings. @subsubsection tune U - Tune mode The transceiver is keyed for a duration of 20 seconds for tuning purposes. Tuning mode is aborted once either DIT or DAH paddles are touched or the control key is pressed. @subsubsection ia A - IAMBIC A Keyer sets IAMBIC A as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ib B - IAMBIC B Keyer sets IAMBIC B as permanent keying mode. An 'R' is sounded to acknowledge the request. @subsubsection ultimatic L - Ultimatic Sets the keyer into ULTIMATIC mode. In Ultimatic mode always the last paddle to be touched is repeated indefinitely when paddles are squeezed @subsubsection dahprio D - DAH priority mode. In squeezed state a sequence of DAHs is sent. Some of the first generation keyers exhibited this behaviour so the chip can simulate that @subsubsection swap X - Paddle swapping DIT and DAH paddles are swapped. An 'R' is sounded to acknowledge the request. @subsubsection side S - Sidetone toggle The built-in sidetone generator setting is toggled (ON -> OFF or OFF -> ON). NOTE: This setting is only of relevance for regular keying mode. Sidetone is always on in command mode. An 'R' is sounded to acknowledge the request. @subsubsection txtog K - TX Keying toggle Toggles the setting of the TX keyer output. In default state the keyer switches the output line when it is in keyer mode. Toggling this setting enables or disables that function. NOTE: Keying is always off in Command mode. An 'R' is sounded to acknowledge the request. @subsubsection farnsworth Z - Set Farnsworth pause Allows setting of an extended inter-character pause in all sending modes, which makes fast keying easier to understand. Note that this of course only influences RECEPTION, not TRANSMISSION. If you desire farnsworth mode in transmission, please manually pause during characters. @subsubsection lvtog I - TX level inverter toggle This function toggles wether the "active" level on the keyer output is VCC or GND. The default is VCC. This setting is dependent on the attached keying circuit. An 'R' is sounded to acknowledge the request. @subsubsection query W - Query current WPM speed Keyer responds with current keying speed in WPM. @subsubsection msgrec 1 and 2 - Record internal messages 1 or 2 The keyer immediately responds with "1" or "2" after which a message up to 100 characters can be keyed at current WPM speed. After 5 seconds of inactivity the message is played back once and then stored in EEPROM. Choosing "1" or "2" but not keying a new message deletes the chosen message buffer content. @subsubsection msgplay E and T - Play back internal messages 1 or 2 The stored messages 1 or 2 are played back with keying enabled (if configured). A press of the command key immediately returns the keyer to keyer mode so a QSO can be started. @subsubsection beacon N - Automatic Beacon The keyer responds with 'N' after which a number between 0 and 9999 can be keyed. After a 5 second timeout the keyer responds by repeating the number and 'R'. Once the keyer returns to keyer mode, the content of message buffer 2 is repeated in intervals of n seconds. The setting is preserved in EEPROM so the chip can be used as a fox hunt keyer. Returning to command mode and entering an interval of 0 (or none at all) stops beacon mode. @subsubsection lock 0 - Lock configuration The 0 command locks or unlocks the main configuration items but not speed, pitch and playback functions. @subsubsection trainer C - Callsign trainer The keyer plays a generated callsign (sidetone only) and the user must repeat it. If it was repeated correctly, 'R' is played and the next callsign is given. If a mistake was sensed, the error prosign (8 dits) is sounded and the current callsign is repeated again for the user to try once more. If nothing is keyed for 10 seconds, the keyer returns to command mode. </pre> edbc0dce0dfd3714ea08be3959cdb34943690cd3 RealEstate 0 172 3607 618 2022-08-28T22:10:24Z Admin 1 wikitext text/x-wiki Real Estate links: * http://www.mortgagechoice.com.au/calculators/home-loan-repayments-calculator.aspx Loan Repayment Calculator [[tips]] 55500eeef36927cf6df8f41157b63d3ef363fa82 Tips 0 876 3608 2022-08-28T22:15:53Z Admin 1 Created page with "Here are some tips that I found useful to bring me in a position to buy my first home. The property * look for a property with as much land as possible * get a freestanding house, or a duplex, or a townhouse, or an appartement. In that order. Personal development * Your finances" wikitext text/x-wiki Here are some tips that I found useful to bring me in a position to buy my first home. The property * look for a property with as much land as possible * get a freestanding house, or a duplex, or a townhouse, or an appartement. In that order. Personal development * Your finances a4c69fc0bb635caaf2a0869403463a06cfe511de 3609 3608 2022-08-28T22:19:00Z Admin 1 wikitext text/x-wiki Here are some tips that I found useful to bring me in a position to buy my first home. The property * look for a property with as much land as possible * get a freestanding house, or a duplex, or a townhouse, or an appartement. In that order. * flat block of land * close to public transport * close to shopping centres * close to schools Personal development * have a can-do attitude * believe you will succeed * get organised * listen to relevant podcasts Your finances * keep track of all your finances * save 10% of what you earn * live within your means 22a2c9d8482555dd021c4d6ad0921c2902337fc1 3610 3609 2022-08-28T22:19:46Z Admin 1 wikitext text/x-wiki Here are some tips that I found useful to bring me in a position to buy my first home. The property * look for a property with as much land as possible * get a freestanding house, or a duplex, or a townhouse, or an appartement. In that order. * flat block of land * close to public transport * close to shopping centres * close to schools The area * research suburb growth * find out what the big players are doing Personal development * have a can-do attitude * believe you will succeed * get organised * listen to relevant podcasts Your finances * keep track of all your finances * save 10% of what you earn * live within your means 225c208594cfe2c9d12a83a468039721ef1fe937 3611 3610 2022-08-28T22:21:20Z Admin 1 wikitext text/x-wiki Here are some tips that I found useful to bring me in a position to buy my first home. The property * look for a property with as much land as possible * get a freestanding house, or a duplex, or a townhouse, or an appartement. In that order. * flat block of land * close to public transport * close to shopping centres * close to schools The area * research suburb growth * find out what the big players are doing Personal development * have a can-do attitude * believe you will succeed * get organised * listen to relevant podcasts Your finances * keep track of all your finances * save 10% of what you earn * live within your means f27d21e0894320cfded06217c4d6019ca6693aed 3612 3611 2022-08-28T22:38:29Z Admin 1 wikitext text/x-wiki Here are some tips that I found useful to bring me in a position to buy my first home. The property * look for a property with as much land as possible * get a freestanding house, or a duplex, or a townhouse, or an appartement. In that order. * flat block of land * close to public transport * close to shopping centres * close to schools * get the worst house in the best street The area * research suburb growth * buy close to where home big improvement stores are built * buy at or under the median price Personal development * have a can-do attitude * believe you will succeed * get organised * listen to relevant podcasts Finances * keep track of all your finances * save 10% of what you earn to build up a deposit * live within your means * consider renting our rooms for your first purchase d8dee7a8440b3dcc78368789bd89d3730056f02c Main Page 0 1 3613 3511 2022-09-29T23:06:24Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! [[File:Free-julian.jpeg|right|link=File:Free-julian.jpeg]] For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] Click here for the KiwiSDR waterfall page: https://www.marcelpost.com:8073 [[File:Kiwisdr-waterfall.jpg|left|link=https://www.marcelpost.com:8073]] List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 89b3526382a7938b137dccb21ef30249c73b3a15 3614 3613 2022-10-02T09:23:18Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! [[File:Free-julian.jpeg|right|link=File:Free-julian.jpeg]] For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] Click here for the KiwiSDR waterfall page: http://www.marcelpost.com:8073 [[File:Kiwisdr-waterfall.jpg|left|link=http://www.marcelpost.com:8073]] List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ b3a6341d6a15482cfae1519444d750cf344fe7ce 3617 3614 2023-07-29T02:17:09Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! [[File:Free-julian.jpeg|right|link=File:Free-julian.jpeg]] For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around October 2023. [[File:Kiwisdr-waterfall.jpg|left|]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 0e3039fa6c4fdf551dc647287263309c027ad5b7 3618 3617 2023-07-29T02:17:54Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! [[File:Free-julian.jpeg|right|link=File:Free-julian.jpeg]] For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around October 2023. [File:Kiwisdr-waterfall.jpg|left] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 0ea0a84dd08b461996def45d261d5d882c5dcc58 3619 3618 2023-07-29T02:18:04Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! [[File:Free-julian.jpeg|right|link=File:Free-julian.jpeg]] For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around October 2023. [[File:Kiwisdr-waterfall.jpg|left]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 8473608ab6c770e2f1e2b9ee88b9afe317a39fc8 3620 3619 2023-07-29T02:18:21Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! [[File:Free-julian.jpeg|right|link=File:Free-julian.jpeg]] For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around October 2023. [[File:Kiwisdr-waterfall.jpg|left]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 4f1b7096e649d7d1a9f26e455bfefdb972a063af 3621 3620 2023-11-13T09:28:29Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! [[File:Free-julian.jpeg|right|link=File:Free-julian.jpeg]] For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around December 2023. [[File:Kiwisdr-waterfall.jpg|left]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 1d5ae89c97a4b4991276d020f295d9a4d061ac22 File:18650-T85-telemetry.jpg 6 877 3615 2023-03-23T23:11:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Mcu 0060-Voltage-data-logger 0 92 3622 3117 2023-11-19T02:03:16Z Admin 1 wikitext text/x-wiki This project is outdated and now replaced by this project: https://www.marcelpost.com/wiki/index.php/Mcu_0084-voltage-datalogger 3f874d30366ae390d0c0bb8a276208da1e667358 3623 3622 2023-11-19T02:04:03Z Admin 1 wikitext text/x-wiki This project is outdated and now replaced by this project: https://www.marcelpost.com/mediawiki/index.php/Mcu_0084-voltage-datalogger 28801a21a6dd93731ea5221d3a688e587b09df6e 3624 3623 2023-11-20T09:59:56Z Admin 1 wikitext text/x-wiki This project is outdated and now replaced by this project: https://www.marcelpost.com/wiki/index.php/Mcu_0084-voltage-datalogger 3f874d30366ae390d0c0bb8a276208da1e667358 Blaupunkt520 repair 0 812 3625 3322 2023-12-01T06:26:28Z Admin 1 wikitext text/x-wiki A little success story of a car radio repair gone right. A few weeks ago my girlfriend's car radio stopped working. The car is a Holden Astra model TS from 2001 released for the Australian market. On the (UK-based) 'Astra Owners Website' they also refer to this model as either a Vauxhall Astra Fourth Generation (or Mk 4) or Opel Astra G. [[File:Astra-TS-CD.jpg]] Funnily enough, there are even three pages on Wikipedia, each for a particular market: * https://en.wikipedia.org/wiki/Holden_Astra * https://en.wikipedia.org/wiki/Vauxhall_Astra * https://en.wikipedia.org/wiki/Opel_Astra The car radio is a Blaupunkt 520. It's a smart-ish radio in that it communicates with an external display higher up in the centre console and shows things like radio station, volume, CD track etc.. [[File:Blaupunkt520 repair0.jpg]] So at one point a few weeks ago the output volume suddenly started dropping. I was listening to some music on CD and the volume coming out of the speakers dropped to almost nothing over a period of maybe 10 seconds. I tried compensating by turning the volume up but it really was getting quieter and quieter. I switched on the FM radio but it was also very very quiet; almost no output volume. I switched off the radio and drove home. This couldn't be a fuse or so because the radio and all the controls still worked; it was just very very quiet. Since the symptoms were the same when either listening to CD or radio I assumed that the fault was in the final output power amplifier. Since I didn't really wanted to open up the radio and swap out these chips I thought it would be simpler to just look around for a second-hand Blaupunkt 520 radio. Someone on eBay had one on sale for $20 ex shipping. Unfortunately he didn't have the security code. The security code is important because it locks down the radio if the battery power is removed. I knew our radio's code but that didn't help for this other radio as a unique code is programmed inside each radio. Change the radio and you'll need a new code. There are usually ways to recover (or maybe reset) the code through the official car dealership, e.g. in case you've lost your code or bought a car without knowing the code from the previous owner. I decided to take the risk and buy the radio on eBay in the hopes of being able to reset it through a local Holden dealer. My girlfriend is the first owner of her Astra and has all the official paperwork to prove so. I thought it would be a (perhaps somewhat costly) breeze to recover the replacement radio's code. The radio from eBay arrived shortly after the purchase and we began inquiring with several Holden dealers in the area to get an idea of what it would cost to have the radio code recovered. I must say this was a very unsatisfying experience. The feedback from the local dealers can be summarised as a mix of hostility, unhelpfulness, rudeness and sheer incompetence. Some seemed to insinuate that we had a stolen radio, others flat-out refused to help and some gave us the idea that our problem wasn't worth their time even though we were well prepared to pay for the recovery service. The next step was to look for an online radio-code recovery service. Yes they exist, but we weren't successful with them either. Websites that offer these services ask for a couple of details and then (if all goes well) instantly produce a code that you can use straight away to unlock your radio. The website I found asked for the Blaupunkt 520's serial number and part number. Well, the serial number was printed on a sticker, but the part number was missing. I looked everywhere, even inside the radio, but was not able to find the part number. I figured that probably any website that offers these instant-code-generator services operates in the same way and not having a critical piece of information will probably mean that any other code generating website would also not be able to help. After calling another Holden dealer I finally got some good information. In order to recover the radio code they would also need the VIN (chassis number) of the car that the radio originally came out of. I asked the eBay seller but he said he was unable to recover this information. Hmm... what to do. Since I already had the radio open at this stage I noticed the two final amplifier ICs. (Grey and black ICs that are backed up against the two copper heat sinks) [[File:Blaupunkt520 repair1.jpg]] Standing up vertically, on the right side is the AM and FM radio module, but apart from that there was no easy swapping of modules that could help me repair the original radio with the one I just bought. The Final Power Amplifier is the component in the radio that amplifies the (relatively weak) audio signals from the AM and FM radio or CD player and drives the loudspeakers. It was my guess to think that the fault was in these chips as the radio controls all worked; there just wasn't any audio out. Investigating the part numbers on these chips it was clear that these were two identical chips, the TDA7375A. I recognised the 'ST' manufacturer logo and had a look on the ST MicroElectronics website to find the component. They now sell the TDA7375V and TDA7375AV, but not the plain 'A' series anymore. The datasheet for the 'AV' product did reveal that it is indeed a 'class AB car radio amplifier able to work either in dual bridge or quad single ended configuration.' (see here for product website on the ST website: https://www.st.com/content/st_com/en/products/automotive-infotainment-and-telematics/automotive-audio-power-amplifiers/automotive-class-ab-audio-power-amplifiers/tda7375av.html) They are able to drive about 35W into a speaker and since there are two I think that it's 35W for the left and 35W for the right audio channel. A quick search on Mouser, a big online electronics parts supplier, showed that these chips retail for about $8 a piece. At least I now knew that these were indeed the chips responsible for the final output Power Amplifiers and that the 'easiest' fix was to swap them over from the eBay radio (assuming that the PA chips in the Ebay radio were still good). I could have bought two new chips from Mouser, but I wasn't 100 per cent sure that the problem was indeed these chips. The most cost-effective way was just to salvage the chips from the eBay radio. This also meant that I didn't have to chase up radio codes as all I was going to do was replace the amplifier chips. Let the (un)soldering begin.. Using a 40W soldering iron, a tin-sucker and a lot of patience I am able to take out the tin surrounding the pins one by one.. [[File:Blaupunkt520 repair2.jpg]] ..until all the pins are freed and I'm able to wiggle out the first chip. (bottom view) [[File:Blaupunkt520 repair3.jpg]] (top view) [[File:Blaupunkt520 repair4.jpg]] Rinse and repeat until both chips from both radios are unsoldered. [[File:Blaupunkt520 repair5.jpg]] Finally! Both chips are unsoldered and ready to be swapped. [[File:Blaupunkt520 repair6.jpg]] The holes in the circuit board were clean enough for the replacement chips and after re-soldering them in place I began assembling the radio back together again. I slotted the radio back into the car dashboard and the moment of truth came.. As expected, the clock-display in the top console asked for 'RADIO CODE - - - -'. I entered the radio code and it was accepted. So far so good. I then turned on the radio to an FM station and... IT PLAYED SOUNDS THROUGH THE SPEAKERS!! YAAAY!!! This is a very good outcome. Apart from the frustration of talking to Holden dealers and the realisation that Blaupunkt doesn't make it easy for their radios to be re-used (even in identical cars!), it took me a few hours to do the soldering. 4ab16b3beb525c8ccc1132a78ee4b0a6c6c00dac Docs and Howto's 0 51 3626 3296 2024-02-04T08:42:05Z Admin 1 wikitext text/x-wiki Howto's, information, guides, and other information that I wanted to have online for easy access. Docs: Something on [[Cryptography]] Examples for [[Gnuplot]] [[Blaupunkt520_repair]] [[MorseRunner]] My Howto's: [[Transfer_contacts_between_iphone_and_android]] [[failsafe on turnigy evolution]] fc81f60d9d38b512e694070ddc14e0cca6876360 MorseRunner 0 878 3627 2024-02-04T08:51:47Z Admin 1 Created page with "An excellent morse-code CW Contest Simulator is a program created by Alex Shovkoplyas (VE3NEA) called MorseRunner. After you set your own callsign and the speed at which you want to send CW you're set to go. I normally set a duration for 15 minutes and then click on the green Run button to kick it off. The software is surprisingly good at realistically simulating various types of contacts; some slow, some fast, sometimes fading, with crackles and pops in the background..." wikitext text/x-wiki An excellent morse-code CW Contest Simulator is a program created by Alex Shovkoplyas (VE3NEA) called MorseRunner. After you set your own callsign and the speed at which you want to send CW you're set to go. I normally set a duration for 15 minutes and then click on the green Run button to kick it off. The software is surprisingly good at realistically simulating various types of contacts; some slow, some fast, sometimes fading, with crackles and pops in the background. Below are a few hints to help me better understand how the program works. c1199b3ca2366f6f78983a7818019f4333dc6bcf 3628 3627 2024-02-04T08:54:28Z Admin 1 wikitext text/x-wiki An excellent morse-code CW Contest Simulator is a program created by Alex Shovkoplyas (VE3NEA) called MorseRunner. After you set your own callsign and the speed at which you want to send CW you're set to go. I normally set a duration for 15 minutes and then click on the green Run button to kick it off. The software is surprisingly good at realistically simulating various types of contacts; some slow, some fast, sometimes fading, with crackles and pops in the background. Below are a few hints to help me better understand how the program works. F1 - sends your callsign to initiate making new contacts Sometimes contacts will prefix their callsign with 'DE', so make sure to listen carefully 7663c04cdd5cd0454f195064d6e72dddd843cbbd 3629 3628 2024-02-04T09:03:06Z Admin 1 wikitext text/x-wiki An excellent morse-code CW Contest Simulator is a program created by Alex Shovkoplyas (VE3NEA) called MorseRunner. After you set your own callsign and the speed at which you want to send CW you're set to go. I normally set a duration for 15 minutes and then click on the green Run button to kick it off. The software is surprisingly good at realistically simulating various types of contacts; some slow, some fast, sometimes fading, with crackles and pops in the background. Below are a few hints to help me better understand how the program works. F1 - sends your callsign to initiate making new contacts The outgoing format is always CQ <YOURCALL> TEST Incoming contact formats: <THEIRCALL> 599 <NR> where <NR> can be: - normal digits (e.g. 001) - replacing a zero with a T (e.g. TT4) Sometimes contacts will prefix their callsign with 'DE', so make sure to listen carefully f016b56e6c881b51c9b0e7919e8e51502b757e14 3630 3629 2024-02-04T09:09:36Z Admin 1 wikitext text/x-wiki An excellent morse-code CW Contest Simulator is a program created by Alex Shovkoplyas (VE3NEA) called MorseRunner. After you set your own callsign and the speed at which you want to send CW you're set to go. I normally set a duration for 15 minutes and then click on the green Run button to kick it off. The software is surprisingly good at realistically simulating various types of contacts; some slow, some fast, sometimes fading, with crackles and pops in the background. Below are a few hints to help me better understand how the program works. F1 - sends your callsign to initiate making new contacts The outgoing format is always CQ <YOURCALL> TEST When a contact sends their call, simply enter it in the 'Call' field and press ENTER. The software will then send: <THEIRCALL> 599 <NR> where <NR> is your sequential contact number (001, 002, etc..) After this, the contact can respond in several ways - R [.-.] acknowledged (roger) of your numbers, after which they'll send their SNR and NR - ? [..--..] not heard correctly, please send again. Press F4 (My) to re-send my number again Incoming contact formats: <THEIRCALL> 599 <NR> where <NR> can be: - normal digits (e.g. 001) - replacing a zero with a T (e.g. TT4) TIPS: - don't wait too long after the contact's call to send your Sometimes contacts will prefix their callsign with 'DE', so make sure to listen carefully 266d06e274bc8d3987ca1bf1d7d5656739812973 3631 3630 2024-02-04T09:20:17Z Admin 1 wikitext text/x-wiki An excellent morse-code CW Contest Simulator is a program created by Alex Shovkoplyas (VE3NEA) called MorseRunner. After you set your own callsign and the speed at which you want to send CW you're set to go. I normally set a duration for 15 minutes and then click on the green Run button to kick it off. The software is surprisingly good at realistically simulating various types of contacts; some slow, some fast, sometimes fading, with crackles and pops in the background. Below are a few hints to help me better understand how the program works. F1 - sends your callsign to initiate making new contacts The outgoing format is always CQ <YOURCALL> TEST When a contact sends their call, it is usually in one of these formats: <THEIRCALL> DE <THEIRCALL> <THEIRCALL> <THEIRCALL> simply enter it in the 'Call' field and press ENTER. The software will then send: <THEIRCALL> 599 <NR> where <NR> is your sequential contact number (001, 002, etc..) After this, the contact can respond in several ways - R <THEIRCALL> acknowledged (roger) of your numbers, after which they'll send their SNR and NR - ? [..--..] not heard correctly, please send again. Press F2 to re-send my number again Incoming contact formats: <THEIRCALL> 599 <NR> where <NR> can be: - normal digits (e.g. 001) - replacing a zero with a T (e.g. TT4) TIPS: - don't wait too long after the contact's call to send your Sometimes contacts will prefix their callsign with 'DE', so make sure to listen carefully b1c32da9aa411fb568e381c197a7ba1b6bb76a09 3632 3631 2024-02-04T09:28:03Z Admin 1 wikitext text/x-wiki An excellent morse-code CW Contest Simulator is a program created by Alex Shovkoplyas (VE3NEA) called MorseRunner. After you set your own callsign and the speed at which you want to send CW you're set to go. I normally set a duration for 15 minutes and then click on the green Run button to kick it off. The software is surprisingly good at realistically simulating various types of contacts; some slow, some fast, sometimes fading, with crackles and pops in the background. Below are a few hints to help me better understand how the program works. F1 - sends your callsign to initiate making new contacts The outgoing format is always CQ <YOURCALL> TEST When a contact sends their call, it is usually in one of these formats: <THEIRCALL> DE <THEIRCALL> <THEIRCALL> <THEIRCALL> simply enter it in the 'Call' field and press ENTER. The software will then send: <THEIRCALL> 599 <NR> where <NR> is your sequential contact number (001, 002, etc..) After this, the contact can respond in several ways - R <THEIRCALL> acknowledged (roger) of your numbers, after which they'll send their SNR and NR - ? [..--..] not heard correctly, please send again. Press F2 to re-send my number again Incoming contact formats: <THEIRCALL> 599 <NR> where <NR> can be: - normal digits (e.g. 001) - replacing a zero with a T (e.g. TT4) If you get their contest serial number wrong it will show as NR in the list of contacts. TIPS: - don't wait too long after the contact's call to send your Sometimes contacts will prefix their callsign with 'DE', so make sure to listen carefully 8a9cf40534965ddcc76b41a9dc8129c0792e9bcb 3633 3632 2024-02-04T09:29:21Z Admin 1 wikitext text/x-wiki An excellent morse-code CW Contest Simulator is a program created by Alex Shovkoplyas (VE3NEA) called MorseRunner. After you set your own callsign and the speed at which you want to send CW you're set to go. I normally set a duration for 15 minutes and then click on the green Run button to kick it off. The software is surprisingly good at realistically simulating various types of contacts; some slow, some fast, sometimes fading, with crackles and pops in the background. Below are a few hints to help me better understand how the program works. F1 - sends your callsign to initiate making new contacts The outgoing format is always CQ <YOURCALL> TEST When a contact sends their call, it is usually in one of these formats: <THEIRCALL> DE <THEIRCALL> <THEIRCALL> <THEIRCALL> simply enter it in the 'Call' field and press ENTER. The software will then send: <THEIRCALL> 599 <NR> where <NR> is your sequential contact number (001, 002, etc..) After this, the contact can respond in several ways - R <THEIRCALL> acknowledged (roger) of your numbers, after which they'll send their SNR and NR - ? [..--..] not heard correctly, please send again. Press F2 to re-send my number again Incoming contact formats: <THEIRCALL> 599 <NR> where <NR> can be: - normal digits (e.g. 001) - replacing a zero with a T (e.g. TT4) If you get their contest serial number wrong it will show as NR in the list of contacts. TIPS: - don't wait too long after the contact's call to send your Sometimes contacts will prefix their callsign with 'DE', so make sure to listen carefully https://www.dxatlas.com/MorseRunner/ https://github.com/VE3NEA/MorseRunner e656ad72530ea0797914e490aaf128cccf1f5329 3634 3633 2024-02-04T09:30:00Z Admin 1 wikitext text/x-wiki An excellent morse-code CW Contest Simulator is a program created by Alex Shovkoplyas (VE3NEA) called MorseRunner. After you set your own callsign and the speed at which you want to send CW you're set to go. I normally set a duration for 15 minutes and then click on the green Run button to kick it off. The software is surprisingly good at realistically simulating various types of contacts; some slow, some fast, sometimes fading, with crackles and pops in the background. Below are a few hints to help me better understand how the program works. F1 - sends your callsign to initiate making new contacts The outgoing format is always CQ <YOURCALL> TEST When a contact sends their call, it is usually in one of these formats: <THEIRCALL> DE <THEIRCALL> <THEIRCALL> <THEIRCALL> simply enter it in the 'Call' field and press ENTER. The software will then send: <THEIRCALL> 599 <NR> where <NR> is your sequential contact number (001, 002, etc..) After this, the contact can respond in several ways - R <THEIRCALL> acknowledged (roger) of your numbers, after which they'll send their SNR and NR - ? [..--..] not heard correctly, please send again. Press F2 to re-send my number again Incoming contact formats: <THEIRCALL> 599 <NR> where <NR> can be: - normal digits (e.g. 001) - replacing a zero with a T (e.g. TT4) If you get their contest serial number wrong it will show as NR in the list of contacts. TIPS: - don't wait too long after the contact's call to send your Sometimes contacts will prefix their callsign with 'DE', so make sure to listen carefully Resources: https://www.dxatlas.com/MorseRunner/ https://github.com/VE3NEA/MorseRunner 1b9a4c2028c4c4a5df0f5f7657de2e91fb041bd2 Linux info 0 25 3635 3391 2024-02-09T01:14:18Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] a9d92f5aa6bde5a55022b5e7c6dfbf81e20171c7 3637 3635 2024-02-09T01:15:51Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] [[systemd-tips]] f6dd49b75379d42a48fa79d19ab196ed6ba75b25 3641 3637 2024-02-09T01:18:13Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] [[systemd-tips]] [[vnc]] 4a141bd7afe565b02cc59295ea6a35f98f5b83cc 3643 3641 2024-02-09T01:20:12Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] [[systemd-tips]] [[vnc]] [[git]] 76679637cd65b2f53b9177469cd1cff21393fa81 Vim-config 0 879 3636 2024-02-09T01:15:00Z Admin 1 Created page with " useful entries in ~/.vimrc <pre> " --- disable syntax highlighting syntax off " --- open file at last edit position autocmd BufReadPost * \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' \ | exe "normal! g`\"" \ | endif " --- disable bell and screen flickering on escape --- set visualbell set t_vb= " -- allow mouse copy and paste -- set mouse=r " --- set tabstops to 4 spaces and set shiftwidth (ident amount) as..." wikitext text/x-wiki useful entries in ~/.vimrc <pre> " --- disable syntax highlighting syntax off " --- open file at last edit position autocmd BufReadPost * \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' \ | exe "normal! g`\"" \ | endif " --- disable bell and screen flickering on escape --- set visualbell set t_vb= " -- allow mouse copy and paste -- set mouse=r " --- set tabstops to 4 spaces and set shiftwidth (ident amount) as 4 spaces to match tabstops --- set ts=4 sw=4 " --- redefine tab as spaces --- set expandtab <pre> 553e26e9db738cd2c68d0e913fb5a39374e83d8e Systemd-tips 0 880 3638 2024-02-09T01:17:14Z Admin 1 Created page with " ==Enable /etc/rc.local=== <pre> --[example /etc.rc.local]-- #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. exit 0 --[end]-- systemctl daemon-reload systemctl start rc-local </pre>" wikitext text/x-wiki ==Enable /etc/rc.local=== <pre> --[example /etc.rc.local]-- #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. exit 0 --[end]-- systemctl daemon-reload systemctl start rc-local </pre> 98c140cece2dcf78a36f3f64a3e016a7644f692f 3639 3638 2024-02-09T01:17:29Z Admin 1 /* Enable /etc/rc.local= */ wikitext text/x-wiki ==Enable /etc/rc.local=== <pre> --[example /etc.rc.local]-- #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. exit 0 --[end]-- systemctl daemon-reload systemctl start rc-local </pre> 9113889898f2ffde863ad59a9270e3eff5f3d23d 3640 3639 2024-02-09T01:17:37Z Admin 1 /* Enable /etc/rc.local= */ wikitext text/x-wiki ===Enable /etc/rc.local=== <pre> --[example /etc.rc.local]-- #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. exit 0 --[end]-- systemctl daemon-reload systemctl start rc-local </pre> e53605fc80567e3d8dcb033afbfbab9b29a2f203 Vnc 0 881 3642 2024-02-09T01:18:57Z Admin 1 Created page with "enabling a VNC server for remote desktop access using x11vnc <pre> apt-get install x11vnc </pre>" wikitext text/x-wiki enabling a VNC server for remote desktop access using x11vnc <pre> apt-get install x11vnc </pre> 26e07fd48305f6e7be825b2ff6f8b4531a5bf2fd Git 0 882 3644 2024-02-09T01:21:21Z Admin 1 Created page with " ===creating a git repository from an existing project=== Assuming a project in ~/myproject containing all sorts of files and directories" wikitext text/x-wiki ===creating a git repository from an existing project=== Assuming a project in ~/myproject containing all sorts of files and directories efafbfc058ccdbee1616c174be24bfd2138c606d 3645 3644 2024-02-09T01:34:22Z Admin 1 wikitext text/x-wiki ===creating a git repository from an existing project=== Assuming a project in ~/myproject containing all sorts of files and directories <pre> In the below example we use a local project called 'myproject' and upload it to the git server. - if the existing local 'myproject' isn't initialised with git yet, then do so now: $ git init $ git add . $ git commit -m "initial commit" - clone 'myproject' from your local project into a new local directory called 'myproject.git' $ git clone --bare myproject/ myproject.git - upload the new repository to the remote server $ scp -r myproject.git/ git@gitserver:/home/git (this will create the folder /home/git/myproject.git on the server) you may now clone the repository directly from the server into a local folder $ cd somedir $ git clone git@gitserver:myproject (the .git extension is not required) lastly, you may now remove the original 'myproject' dir locally </pre> ac32a3326d0248e1a58e9816a17d8b0a07e967c5 3646 3645 2024-02-09T01:34:53Z Admin 1 Replaced content with " [[Creating a git repository from an existing project]]" wikitext text/x-wiki [[Creating a git repository from an existing project]] fa4dcfa192e701043712a92e7e9bc0097b8ce841 3650 3646 2024-02-09T01:36:16Z Admin 1 wikitext text/x-wiki [[Creating a git repository from an existing project]] [[setting aliases]] 9ad72aa26ac168f0a1afe36be15be740a9db87b4 3652 3650 2024-02-09T01:40:48Z Admin 1 wikitext text/x-wiki [[Creating a git repository from an existing project]] [[setting aliases]] [[bash git-prompt]] c6602cc7233957d4ac3661c2a0bfb9761f7730b7 3656 3652 2024-02-09T01:44:28Z Admin 1 wikitext text/x-wiki [[Creating a git repository from an existing project]] [[setting aliases]] [[bash git-prompt]] [[branches]] 05b6568992c5698a2c7f65572c6974c3000d85a0 3682 3656 2024-02-13T22:43:51Z Admin 1 wikitext text/x-wiki [[Creating a git repository from an existing project]] [[setting aliases]] [[setting global variables]] [[bash git-prompt]] [[branches]] 4d3f802013c844ffa7aa2455995fd3928cabfbfe Creating a git repository from an existing project 0 883 3647 2024-02-09T01:34:59Z Admin 1 Created page with " ===creating a git repository from an existing project=== Assuming a project in ~/myproject containing all sorts of files and directories <pre> In the below example we use a local project called 'myproject' and upload it to the git server. - if the existing local 'myproject' isn't initialised with git yet, then do so now: $ git init $ git add . $ git commit -m "initial commit" - clone 'myproject' from your local project into a new local di..." wikitext text/x-wiki ===creating a git repository from an existing project=== Assuming a project in ~/myproject containing all sorts of files and directories <pre> In the below example we use a local project called 'myproject' and upload it to the git server. - if the existing local 'myproject' isn't initialised with git yet, then do so now: $ git init $ git add . $ git commit -m "initial commit" - clone 'myproject' from your local project into a new local directory called 'myproject.git' $ git clone --bare myproject/ myproject.git - upload the new repository to the remote server $ scp -r myproject.git/ git@gitserver:/home/git (this will create the folder /home/git/myproject.git on the server) you may now clone the repository directly from the server into a local folder $ cd somedir $ git clone git@gitserver:myproject (the .git extension is not required) lastly, you may now remove the original 'myproject' dir locally </pre> ac32a3326d0248e1a58e9816a17d8b0a07e967c5 3648 3647 2024-02-09T01:35:12Z Admin 1 wikitext text/x-wiki Assuming a project in ~/myproject containing all sorts of files and directories <pre> In the below example we use a local project called 'myproject' and upload it to the git server. - if the existing local 'myproject' isn't initialised with git yet, then do so now: $ git init $ git add . $ git commit -m "initial commit" - clone 'myproject' from your local project into a new local directory called 'myproject.git' $ git clone --bare myproject/ myproject.git - upload the new repository to the remote server $ scp -r myproject.git/ git@gitserver:/home/git (this will create the folder /home/git/myproject.git on the server) you may now clone the repository directly from the server into a local folder $ cd somedir $ git clone git@gitserver:myproject (the .git extension is not required) lastly, you may now remove the original 'myproject' dir locally </pre> d1aeb4db93dfe24b42919d96610808d8080eaf47 3649 3648 2024-02-09T01:35:34Z Admin 1 wikitext text/x-wiki Assuming a project in ~/myproject containing all sorts of files and directories <pre> In the below example we use a local project called 'myproject' and upload it to the git server. - if the existing local 'myproject' isn't initialised with git yet, then do so now: $ git init $ git add . $ git commit -m "initial commit" - clone 'myproject' from your local project into a new local directory called 'myproject.git' $ git clone --bare myproject/ myproject.git - upload the new repository to the remote server $ scp -r myproject.git/ git@gitserver:/home/git (this will create the folder /home/git/myproject.git on the server) you may now clone the repository directly from the server into a local folder $ cd somedir $ git clone git@gitserver:myproject (the .git extension is not required) lastly, you may now remove the original 'myproject' dir locally </pre> 91e10e6bfe3ff31122c11513f2a2ec3018034462 Setting aliases 0 884 3651 2024-02-09T01:36:47Z Admin 1 Created page with " <pre> creating an alias will probably save you a lot of time typing in long commands to create an alias either create one from the commandline or edit ~/.gitconfig on the commandline: git config --global alias.hist 'log --graph --all --oneline' NOTE: omitting '--global' will only set this alias for this repository editing the config file: --- [alias] hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --all --oneline --date=short --- or..." wikitext text/x-wiki <pre> creating an alias will probably save you a lot of time typing in long commands to create an alias either create one from the commandline or edit ~/.gitconfig on the commandline: git config --global alias.hist 'log --graph --all --oneline' NOTE: omitting '--global' will only set this alias for this repository editing the config file: --- [alias] hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --all --oneline --date=short --- or setting it from the command line: git config --global alias.hist 'log --graph --all --oneline --pretty=format:"%h%x09%an%x09%ad%x09%s" --date=relative --abbrev-commit --decorate' </pre> 1680e717d0ec61a038a31f8f74c17f034e069417 Bash git-prompt 0 885 3653 2024-02-09T01:42:27Z Admin 1 Created page with " ---automatically change the prompt when you're in a git directory--- <pre> ---[~/.bashrc]--- # uncomment these 5 lines to automatically show a different PS1 prompt when you enter a git directory GIT_PS1_SHOWDIRTYSTATE=1 GIT_PS1_SHOWUNTRACKEDFILES=1 GIT_PS1_SHOWCOLORHINTS=true PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "' source /usr/lib/git-core/git-sh-prompt ---[]--- </pre>" wikitext text/x-wiki ---automatically change the prompt when you're in a git directory--- <pre> ---[~/.bashrc]--- # uncomment these 5 lines to automatically show a different PS1 prompt when you enter a git directory GIT_PS1_SHOWDIRTYSTATE=1 GIT_PS1_SHOWUNTRACKEDFILES=1 GIT_PS1_SHOWCOLORHINTS=true PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "' source /usr/lib/git-core/git-sh-prompt ---[]--- </pre> 1446835dc8a6b3685611cea0a8300501fe7008fa 3654 3653 2024-02-09T01:42:36Z Admin 1 wikitext text/x-wiki automatically change the prompt when you're in a git directory <pre> ---[~/.bashrc]--- # uncomment these 5 lines to automatically show a different PS1 prompt when you enter a git directory GIT_PS1_SHOWDIRTYSTATE=1 GIT_PS1_SHOWUNTRACKEDFILES=1 GIT_PS1_SHOWCOLORHINTS=true PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "' source /usr/lib/git-core/git-sh-prompt ---[]--- </pre> 751f4c596462b972b4953b1ea4d6bfcda9ea75bb 3655 3654 2024-02-09T01:42:56Z Admin 1 wikitext text/x-wiki automatically change the prompt when you're in a git directory <pre> ---[~/.bashrc]--- # uncomment these 5 lines to automatically show a different PS1 prompt when you enter a git directory GIT_PS1_SHOWDIRTYSTATE=1 GIT_PS1_SHOWUNTRACKEDFILES=1 GIT_PS1_SHOWCOLORHINTS=true PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "' source /usr/lib/git-core/git-sh-prompt ---[]--- </pre> f8ace1057ec4ba7e2c9a286b0e93875093978631 Branches 0 886 3657 2024-02-09T01:45:29Z Admin 1 Created page with " Git branch model:" wikitext text/x-wiki Git branch model: 62c106d4d34a0124e21e1ed0e54ec1e74ca2e777 3658 3657 2024-02-09T01:47:10Z Admin 1 wikitext text/x-wiki Git branch model: - develop - release - master 50e783bdb9e5fb48e886cb17b8c864f26dac4ec8 3659 3658 2024-02-09T01:47:42Z Admin 1 wikitext text/x-wiki Git branch model: - develop - feature - release - master 8acae263012e73395f8236651af73765d69dc845 3660 3659 2024-02-09T01:48:20Z Admin 1 wikitext text/x-wiki Git branch model: - develop - feature - release - master Some basic rules for successful development using branches: - e5e6b235b6c7a808dfb90fd1502a9b52a930d7ce 3661 3660 2024-02-09T01:51:46Z Admin 1 wikitext text/x-wiki Git branch model: - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resources: https://nvie.com/posts/a-successful-git-branching-model/ 957c9a3d280a5d039abb4dbc3a55776d75638dac 3662 3661 2024-02-09T01:53:41Z Admin 1 wikitext text/x-wiki Git branch model: - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ===1. create a new development branch from master=== ac04d22f45315b9993cece01c3ec69b859d694a7 3663 3662 2024-02-09T01:54:48Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ===1. create a new development branch from master=== <pre> git branch develop </pre> ===2. develop code=== c190fb5bae0b7ff7b53b1b41e9459983e22f04fd 3664 3663 2024-02-09T01:55:54Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop </pre> ==2. develop code== <pre> git checkout develop <pre> 07e1cbb800df384ee97781b03ae761f1b2829964 3665 3664 2024-02-09T01:57:45Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop </pre> ==2. develop code== <pre> git checkout develop </pre> ===2.1 commit code=== <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== <pre> git push </pre> 0cb864f729e5732362db9804eb2f03d6bc94eba6 3666 3665 2024-02-09T02:02:31Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. develop code== When developing code for a website, it may be wise to clone 'develop' into a new folder so as not to mess with the live/production 'master' environment <pre> git checkout develop </pre> ===2.1 commit code=== <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== <pre> git push </pre> 09b0d224c8f9f7823b946059b17d067089255e90 3667 3666 2024-02-09T02:03:50Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. develop code== When developing code for a website, it may be wise to clone 'develop' into a new folder so as not to mess with the live/production 'master' environment <pre> mkdir myproject_develop git clone git@gitserver:myproject cd myproject git checkout develop </pre> ===2.1 commit code=== <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== <pre> git push </pre> 099648fdb35eecea229cac0b1f9c347356d90ace 3668 3667 2024-02-09T02:07:51Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. develop code== When developing code for a website, it may be wise to clone 'develop' into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> ===2.1 commit code=== <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== <pre> git push </pre> 508c01ff7e9f5fa52cc99b8ba2b5545b2942ac32 3669 3668 2024-02-09T02:09:23Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. develop code== ===2.1 set up develop environment=== When developing code for a website, it may be wise to clone 'develop' into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> ===2.1 commit code=== <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== <pre> git push </pre> 5be52f1c6769744b9edaf9323416b78996bd01f1 3670 3669 2024-02-09T02:09:57Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. develop code== ===2.1 set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> ===2.1 commit code=== <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== <pre> git push </pre> 8fd8e9e1040d1c3f716bc90b2874f4bc21509eca 3671 3670 2024-02-09T02:13:30Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. develop code== ===2.1 set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> ===2.1 commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== <pre> git push </pre> 078d8c41867c1923c88afee46f1ea98d70c048fc 3672 3671 2024-02-09T02:16:06Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. develop code== ===2.1 set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> ===2.1 commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> e90a1677a2cba7c32720607428605546d604c032 3673 3672 2024-02-09T02:34:17Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. develop code== The develop branch is used for continuous code development and for working out conflicts when merging features that were on a separate branch. Only when the code is functional enough can it be considered as a release candidate (see Releases below). ===2.1 set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> ===2.1 commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> 52b088b39129d48eedefeade43bd39ac13895013 3674 3673 2024-02-09T02:40:09Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. Create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. Develop code== The develop branch is used for continuous code development and for working out conflicts when merging features that were on a separate branch. Only when the code is functional enough can it be considered as a release candidate (see Releases below). ===2.1 set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> ===2.1 commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> ==3 Releases== When the code in the develop branch is functional and without major bugs it can be considered as a release candidate. ===3.1 Create Release branch=== If not done so already, create a new Release branch from develop. <pre> git branch release git push --set-upstream origin release </pre> 153dbbad6d10b19562cca66bb0211c8c7dda4a21 3675 3674 2024-02-09T02:47:39Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. Create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. Develop code== The develop branch is used for continuous code development and for working out conflicts when merging features that were on a separate branch. Only when the code is functional enough can it be considered as a release candidate (see Releases below). ===2.1 set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> ===2.1 commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> ==3 Releases== When the code in the develop branch is functional and without major bugs it can be considered as a release candidate. Code in the release branch can still contain bugs, but it's intended to fix only the current bugs and not introduce new features. Once the release has been thoroughly tested and all known bugs are squashed it can be brought over to the main branch (see Stable branch below). ===3.1 Create Release branch=== If not done so already, create a new Release branch from develop. <pre> git branch release git push --set-upstream origin release </pre> 0ff2f8777ffd25a6b716bb01d7fa772735b830a0 3676 3675 2024-02-09T02:57:27Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. Create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. Develop code== The develop branch is used for continuous code development and for working out conflicts when merging features that were on a separate branch. Only when the code is functional enough can it be considered as a release candidate (see Releases below). ===2.1 set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> If the development branch and work environment has already been created, then simply checkout the code: <pre> cd myproject_dev git checkout develop </pre> ===2.1 commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> ==3 Releases== When the code in the develop branch is functional and without major bugs it can be considered as a release candidate. Code in the release branch can still contain bugs, but it's intended to fix only the current bugs and not introduce new features. Once the release has been thoroughly tested and all known bugs are squashed it can be brought over to the main branch (see Stable branch below). ===3.1 Create Release branch=== If not done so already, create a new Release branch from develop. <pre> git branch release git push --set-upstream origin release </pre> If the release branch has already been created, then simply checkout the release branch <pre> git checkout release </pre> ===4 Stable=== When finishing touches on the release branch have completed it's time to merge the code of the release branch into the master branch. The master branch is where only stable code releases should live. This keeps the branch clean from development work and commit comments. <pre> git checkout master git pull origin master git merge release git push origin master </pre> f241ffae23322729396a1be082bb791b0a19288c 3677 3676 2024-02-09T02:57:52Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==1. Create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==2. Develop code== The develop branch is used for continuous code development and for working out conflicts when merging features that were on a separate branch. Only when the code is functional enough can it be considered as a release candidate (see Releases below). ===2.1 set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> If the development branch and work environment has already been created, then simply checkout the code: <pre> cd myproject_dev git checkout develop </pre> ===2.1 commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===2.2 upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> ==3 Releases== When the code in the develop branch is functional and without major bugs it can be considered as a release candidate. Code in the release branch can still contain bugs, but it's intended to fix only the current bugs and not introduce new features. Once the release has been thoroughly tested and all known bugs are squashed it can be brought over to the main branch (see Stable branch below). ===3.1 Create Release branch=== If not done so already, create a new Release branch from develop. <pre> git branch release git push --set-upstream origin release </pre> If the release branch has already been created, then simply checkout the release branch <pre> git checkout release </pre> ==4 Stable== When finishing touches on the release branch have completed it's time to merge the code of the release branch into the master branch. The master branch is where only stable code releases should live. This keeps the branch clean from development work and commit comments. <pre> git checkout master git pull origin master git merge release git push origin master </pre> f7886ba094fddb8407acebcca9aacb1f4060451a 3678 3677 2024-02-09T02:58:32Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==Create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==Develop code== The develop branch is used for continuous code development and for working out conflicts when merging features that were on a separate branch. Only when the code is functional enough can it be considered as a release candidate (see Releases below). ===Set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> If the development branch and work environment has already been created, then simply checkout the code: <pre> cd myproject_dev git checkout develop </pre> ===Commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===Upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> ==Releases== When the code in the develop branch is functional and without major bugs it can be considered as a release candidate. Code in the release branch can still contain bugs, but it's intended to fix only the current bugs and not introduce new features. Once the release has been thoroughly tested and all known bugs are squashed it can be brought over to the main branch (see Stable branch below). ===Create Release branch=== If not done so already, create a new Release branch from develop. <pre> git branch release git push --set-upstream origin release </pre> If the release branch has already been created, then simply checkout the release branch <pre> git checkout release </pre> ==Stable== When finishing touches on the release branch have completed it's time to merge the code of the release branch into the master branch. The master branch is where only stable code releases should live. This keeps the branch clean from development work and commit comments. <pre> git checkout master git pull origin master git merge release git push origin master </pre> dfd879dc60fb97dd915ceee5fc9fb745478a5608 3679 3678 2024-02-09T03:02:41Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==Create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==Develop code== The develop branch is used for continuous code development and for working out conflicts when merging features that were on a separate branch. Only when the code is functional enough can it be considered as a release candidate (see Releases below). ===Set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> If the development branch and work environment has already been created, then simply checkout the code: <pre> cd myproject_dev git checkout develop </pre> ===Commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===Upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> ==Releases== When the code in the develop branch is functional and without major bugs it can be considered as a release candidate. Code in the release branch can still contain bugs, but it's intended to fix only the current bugs and not introduce new features. Once the release has been thoroughly tested and all known bugs are squashed it can be brought over to the main branch (see Stable branch below). ===Create Release branch=== If not done so already, create a new Release branch from develop. <pre> git branch release git push --set-upstream origin release </pre> If the release branch has already been created, then simply checkout the release branch <pre> git checkout release </pre> ==Stable== When finishing touches on the release branch have completed it's time to merge the code of the release branch into the master branch. The master branch is where only stable code releases should live. This keeps the branch clean from development work and commit comments. <pre> git checkout master git pull origin master git merge release git push origin master </pre> If the 'release' branch is not yet known to the master branch, you can bring the local git up to date with what's on the server with the fetch command: <pre> git fetch </pre> e4fe0038b9592d4e171f120afabff80a022e69e6 3680 3679 2024-02-09T03:04:50Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==Create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==Develop code== The develop branch is used for continuous code development and for working out conflicts when merging features that were on a separate branch. Only when the code is functional enough can it be considered as a release candidate (see Releases below). ===Set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> If the development branch and work environment has already been created, then simply checkout the code: <pre> cd myproject_dev git checkout develop </pre> ===Commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===Upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> ==Releases== When the code in the develop branch is functional and without major bugs it can be considered as a release candidate. Code in the release branch can still contain bugs, but it's intended to fix only the current bugs and not introduce new features. Once the release has been thoroughly tested and all known bugs are squashed it can be brought over to the main branch (see Stable branch below). ===Create Release branch=== If not done so already, create a new Release branch from develop. <pre> git branch release git push --set-upstream origin release </pre> If the release branch has already been created, then simply checkout the release branch <pre> git checkout release </pre> ==Stable== When finishing touches on the release branch have completed it's time to merge the code of the release branch into the master branch. The master branch is where only stable code releases should live. This keeps the branch clean from development work and commit comments. <pre> git checkout master git pull origin master git merge release git push origin master </pre> If the 'release' branch is not yet known to the master branch, you can bring the local git up to date with what's on the server with the fetch command: <pre> git fetch </pre> Do not merge from release again until the version in release is ready to be called stable. 887631a8427a66994dc5f5d7512fa9e1980db546 3681 3680 2024-02-09T03:13:26Z Admin 1 wikitext text/x-wiki ===Git branch model=== - develop - feature - release - master Some basic rules for successful development using branches: - master only gets updated from release - develop is the main working branch - develop is the source for new releases and features - features can only go back into develop resource: https://nvie.com/posts/a-successful-git-branching-model/ ==Create a new development branch from master== <pre> git branch develop git push --set-upstream origin develop </pre> ==Develop code== The develop branch is used for continuous code development and for working out conflicts when merging features that were on a separate branch. Only when the code is functional enough can it be considered as a release candidate (see Releases below). ===Set up develop environment=== When developing code for a website, it may be wise to clone the project into a new folder so as not to mess with the live/production 'master' environment <pre> git clone git@gitserver:myproject myproj_dev cd myproj_dev git checkout develop </pre> If the development branch and work environment has already been created, then simply checkout the code: <pre> cd myproject_dev git checkout develop </pre> It may be useful to have a text file BUGS to let the developers know what work is still outstanding. A text file CHANGES might be useful for the end-user to quickly see which new features or bug fixes have been incorporated. ===Commit code=== After you have developed your code and completed some logical component it is wise to commit the changes to the repository to make it easier for future code revision and debugging. <pre> git add . git commit -m <commit message> </pre> ===Upload commit to server=== When a remote repository is available it is good practice to also upload the latest commit so everyone else can get access to the most recent changes in code. <pre> git push </pre> ==Releases== When the code in the develop branch is functional and without major bugs it can be considered as a release candidate. Code in the release branch can still contain bugs, but it's intended to fix only the current bugs and not introduce new features. Once the release has been thoroughly tested and all known bugs are squashed it can be brought over to the main branch (see Stable branch below). ===Create Release branch=== If not done so already, create a new Release branch from develop. <pre> git branch release git push --set-upstream origin release </pre> If the release branch has already been created, then simply checkout the release branch <pre> git checkout release </pre> Develop your code and commit as per normal. It may be useful to create a text file RELEASE_VERSION to let the developers know what this release is for. ==Stable== When finishing touches on the release branch have completed it's time to merge the code of the release branch into the master branch. The master branch is where only stable code releases should live. This keeps the branch clean from development work and commit comments. <pre> git checkout master git pull origin master git merge release git push origin master </pre> If the 'release' branch is not yet known to the master branch, you can bring the local git up to date with what's on the server with the fetch command: <pre> git fetch </pre> Do not merge from release again until the version in release is ready to be called stable. Next, go to the development environment and open the release branch and rev up the RELEASE_VERSION to what the next stable version number should be. 010fc96a51b1b5e3fa524f5c641a9c55519cc5db Setting global variables 0 887 3683 2024-02-13T22:44:49Z Admin 1 Created page with " ===Global User Name=== Get the current global user name: <pre> git config --global user.name "Mona Lisa" </pre> Set the current global user name: <pre> git config --global user.name "Mona Lisa" </pre>" wikitext text/x-wiki ===Global User Name=== Get the current global user name: <pre> git config --global user.name "Mona Lisa" </pre> Set the current global user name: <pre> git config --global user.name "Mona Lisa" </pre> 2f5eb810b5244ffd8275856b5c98762ec7ec830b 3684 3683 2024-02-13T22:47:02Z Admin 1 wikitext text/x-wiki ===Global User Name=== Get the current global user name: <pre> git config --global user.name </pre> Set the current global user name: <pre> git config --global user.name "Joe Bloggs" </pre> ===Global User Email address=== Get the current global user email address: <pre> git config --global user.email </pre> Set the current global user email address: <pre> git config --global user.name "joe@bloggs.com" </pre> 22c612b14a06175726420f94c96acc08db70f022 Oddities 0 102 3685 2187 2024-02-24T07:06:34Z Admin 1 wikitext text/x-wiki Mixed bag of things. [[dust-storms-23-sep-2009]] [[recipes]] [[observations of the Australian culture by a Dutch immigrant]] [[sliderules]] [[what are the chances]] b8ff5291d6e8bb0d9c8f0a8571aa348c4df8753b What are the chances 0 888 3686 2024-02-24T07:07:04Z Admin 1 Created page with "Infographic: What are the chances" wikitext text/x-wiki Infographic: What are the chances 04908cbea48f93b0fa24340aeb11a85c71c84fbb 3688 3686 2024-02-24T07:11:42Z Admin 1 wikitext text/x-wiki Infographic: What are the chances [[File:What are the chances.jpg]] e9b19892e35e24540b6ba42dc87f74040b274647 3689 3688 2024-02-24T07:11:58Z Admin 1 wikitext text/x-wiki [[File:What are the chances.jpg]] b630d47be7b79d5b2e63c295fbc268b25f078e44 File:What are the chances.jpg 6 889 3687 2024-02-24T07:11:12Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Linux info 0 25 3690 3643 2024-02-25T05:09:13Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] [[systemd-tips]] [[vnc]] [[git]] [[bash-examples]] 5e15f1893ead3efff66128e39768c8653682a183 3695 3690 2024-05-05T00:05:22Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] [[vim-cheatsheet]] [[systemd-tips]] [[vnc]] [[git]] [[bash-examples]] f6e0acfede30385752309a1825c10462ec699ac9 3704 3695 2024-06-22T02:37:46Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] [[vim-cheatsheet]] [[systemd-tips]] [[vnc]] [[git]] [[bash-examples]] [[archlinux]] a0f3383672fa7650df6185b3d4b6dbde1897ac0e 3711 3704 2024-11-04T09:58:02Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] [[vim-cheatsheet]] [[systemd-tips]] [[vnc]] [[git]] [[bash-examples]] [[archlinux]] [[wifi-hotspot]] b655354f9f433ec9ffefa7bf74900158762ccd91 Bash-examples 0 890 3691 2024-02-25T05:10:10Z Admin 1 Created page with "Collection of somewhat useful scrips I found that do things in bash. [[csv-iteration]]" wikitext text/x-wiki Collection of somewhat useful scrips I found that do things in bash. [[csv-iteration]] 6a2c4b66d5ecc5b4b329d103b73a8f6d84eeabdb Csv-iteration 0 891 3692 2024-02-25T05:10:39Z Admin 1 Created page with " <pre> #!/bin/sh # process a comma-separated list of values ITEMLIST="apples,pears" ITEMCOUNT=1 STATUS=0 while true do ARGCNT="$" ARGCNT=$ARGCNT$ITEMCOUNT ITEMNAME=`echo $ITEMLIST | awk -F \, "{print $ARGCNT}"` if test -z "$ITEMNAME" then ITEMCOUNT=$((ITEMCOUNT - 1)) break else # item name found, do something with it echo "Item $ITEMCOUNT = $ITEMNAME" ITEMCOUNT=$((ITEMCOUNT + 1)) fi done </pre>" wikitext text/x-wiki <pre> #!/bin/sh # process a comma-separated list of values ITEMLIST="apples,pears" ITEMCOUNT=1 STATUS=0 while true do ARGCNT="$" ARGCNT=$ARGCNT$ITEMCOUNT ITEMNAME=`echo $ITEMLIST | awk -F \, "{print $ARGCNT}"` if test -z "$ITEMNAME" then ITEMCOUNT=$((ITEMCOUNT - 1)) break else # item name found, do something with it echo "Item $ITEMCOUNT = $ITEMNAME" ITEMCOUNT=$((ITEMCOUNT + 1)) fi done </pre> 1ba7b408f92b9765c788f3648a1a87cdeb4fb103 3693 3692 2024-02-25T05:11:00Z Admin 1 wikitext text/x-wiki <pre> #!/bin/sh # process a comma-separated list of values ITEMLIST="apples,pears" ITEMCOUNT=1 while true do ARGCNT="$" ARGCNT=$ARGCNT$ITEMCOUNT ITEMNAME=`echo $ITEMLIST | awk -F \, "{print $ARGCNT}"` if test -z "$ITEMNAME" then ITEMCOUNT=$((ITEMCOUNT - 1)) break else # item name found, do something with it echo "Item $ITEMCOUNT = $ITEMNAME" ITEMCOUNT=$((ITEMCOUNT + 1)) fi done </pre> 87032e40ef1256e38c8777104c7766a000cfcead 3694 3693 2024-02-25T05:19:46Z Admin 1 wikitext text/x-wiki <pre> #!/bin/sh # process a comma-separated list of values ITEMLIST="apples,pears" ITEMCOUNT=1 while true do ARGCNT="$" ARGCNT=$ARGCNT$ITEMCOUNT ITEMNAME=`echo $ITEMLIST | awk -F \, "{print $ARGCNT}"` if test -z "$ITEMNAME" then ITEMCOUNT=$((ITEMCOUNT - 1)) break else # item name found, do something with it echo "Item $ITEMCOUNT = $ITEMNAME" fi ITEMCOUNT=$((ITEMCOUNT + 1)) done </pre> 54196cdb7efb7ee1cddd04c7f1520428788ff8a6 Vim-cheatsheet 0 892 3696 2024-05-05T00:08:01Z Admin 1 Created page with "===Markers=== <pre> :ma set current position for mark A `a jump to position of mark A :marks show list of marks </pre>" wikitext text/x-wiki ===Markers=== <pre> :ma set current position for mark A `a jump to position of mark A :marks show list of marks </pre> d5db63c958e7d116491a741fc97dec0671dcec4c 3697 3696 2024-05-05T00:10:40Z Admin 1 wikitext text/x-wiki ===Cursor movement=== <pre> gg home Shift-G end </pre> ===Markers=== <pre> ma set current position for mark A `a jump to position of mark A :marks show list of marks </pre> 340e83fd159d5522e3f358d2fbf52239a3440222 3698 3697 2024-05-05T00:12:02Z Admin 1 wikitext text/x-wiki ===Cursor movement=== <pre> gg home G end </pre> ===Markers=== <pre> ma set current position for mark A `a jump to position of mark A :marks show list of marks </pre> 4cabcdd58228447ea2ee28020e1833a13983dfd0 3699 3698 2024-05-05T00:13:16Z Admin 1 wikitext text/x-wiki ===Cursor movement=== <pre> gg home G end </pre> ===Markers=== <pre> ma set current position for mark A 'a jump to position of mark A :marks show list of marks </pre> 89592ea505de9993386431ed825a5fead749509a 3700 3699 2024-05-05T00:52:17Z Admin 1 wikitext text/x-wiki ===Cursor movement=== <pre> gg home G end </pre> ===Markers=== <pre> ma set current position for mark A 'a jump to position of mark A [' next mark ]' previous mark :marks show list of marks </pre> 09257f7ab0440e78a636c4d68f2ca64278e635db 3701 3700 2024-05-05T00:53:47Z Admin 1 wikitext text/x-wiki ===Cursor movement=== <pre> gg home G end </pre> ===Markers=== <pre> ma set current position for mark A 'a jump to position of mark A [' previous mark ]' next mark :marks show list of marks </pre> 27c12f23db500ae5f1a5668c748603ebd2fe0cd4 3702 3701 2024-05-05T01:59:44Z Admin 1 wikitext text/x-wiki ===Cursor movement=== <pre> gg home G end </pre> ===Markers=== <pre> ma set current position for mark A 'a jump to position of mark A [' previous mark ]' next mark :marks show list of marks </pre> ===Find and Replace=== <pre> :%s/word1/word2/ once :%s/word1/word2/g entire document :%s/word1/word2/gc entire document, with confirmation </pre> a8a034d7e348f4db10b29902204858679d0e417f 3703 3702 2024-05-05T02:03:35Z Admin 1 wikitext text/x-wiki ===Cursor movement=== <pre> gg home G end </pre> ===Markers=== <pre> ma set current position for mark A 'a jump to position of mark A [' previous mark ]' next mark :marks show list of marks </pre> ===Find and Replace=== <pre> :%s/word1/word2/g entire document, all instances on a line :%s/word1/word2/gc entire document, all instances on a line, with confirmation :,$s/word1/word2/c staring from current line, first instance, with confirmation </pre> 15a56e5833b3d895a891766ee9d53ff3d7d2b51d Archlinux 0 893 3705 2024-06-22T02:38:30Z Admin 1 Created page with "setup: <pre> arch-- partition disk -- fdisk /dev/sda mkfs.ext4 /dev/sda1 mkswap /dev/sda2 mount /dev/sda1 /mnt swapon /dev/sda2 -- install os -- pacstrap -K /mnt base linux linux-firmware -- update filesystem table -- genfstab -U /mnt >> /mnt/etc/fstab -- switch to new installation -- arch-chroot /mnt -- configure a few things -- /etc/hostname passwd pacman -S grub-bios grub-install /dev/sda grub-mkconfig -o /boot/grub/grub.cfg -- manually get ip address from dhcp..." wikitext text/x-wiki setup: <pre> arch-- partition disk -- fdisk /dev/sda mkfs.ext4 /dev/sda1 mkswap /dev/sda2 mount /dev/sda1 /mnt swapon /dev/sda2 -- install os -- pacstrap -K /mnt base linux linux-firmware -- update filesystem table -- genfstab -U /mnt >> /mnt/etc/fstab -- switch to new installation -- arch-chroot /mnt -- configure a few things -- /etc/hostname passwd pacman -S grub-bios grub-install /dev/sda grub-mkconfig -o /boot/grub/grub.cfg -- manually get ip address from dhcp server -- dhcpcd ens33 EFI setup fdisk /dev/sda 'g' initialise as GPT /dev/sda1 EFI System 300M /dev/sda2 swap 500M /dev/sda3 / rest mkfs.fat -F32 /dev/sda1 mkfs.ext4 /dev/sda3 mkswap /dev/sda2 mount /dev/sda3 /mnt swapon /dev/sda2 pacman -S grub efibootmgr dosfstools os-prober mtools mkdir /boot/EFI mount /dev/sda1 /boot/EFI grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck grub-mkconfig -o /boot/grub/grub.cfg https://www.tecmint.com/arch-linux-installation-and-configuration-guide/ https://wiki.archlinux.org/title/installation_guide useful packages to install: vim which net-tools dhcpcd iwd iwlwifi wpa_supplicant </pre> 6cad1223ab9709063514ffe020188b188ae6206a Observations of the Australian culture by a Dutch immigrant 0 201 3706 3092 2024-06-26T07:10:08Z Admin 1 wikitext text/x-wiki In 2001 I immigrated from the Netherlands to Australia. Since then I have worked and lived in various places. During this time I noticed some interesting details of the Australian land and culture that were not be obvious at first. You may find these details useful when visiting Australia as a tourist. This page further describes some of those details. Some if them are supposed to be funny, so have a chuckle! :-) ==Housing== * Most rent is charged per week or per fortnight * Many houses are not built with insulation in mind. * Be sure to find single-glasing, gaps around most doors and no hallway as a wind-buffer. * Most houses do not have central heating so a small electric heater or putting on an extra jumper are your options if a reverse-cycle air-conditioning system is not installed. * Door handles are often knobs, making them unusable for people that have poor grip strentgh. * Many mailboxes are too small to receive a straight A4 sheet mail pieces ==Working== * Most salaries are paid weekly or fortnightly. * Staff birthdays are usually ignored. ==Cities== * Garbage is collected even on public holidays such as Christmas day and New Year's day. * Street names are not unique in a city (e.g. in Newcastle, there is a George Street in Mayfield East, Wallsend, North Lambton, Tighes Hill and Highfields) ==Food== * Meat pies is a common food available in most road cafe's. It's a meat-filled pastry mini-pie, to be eaten hot, and can be served as-is or with a mushy peas/mash potato/gravy dressing. * Recycling of cans (glass, plastic or aluminium) and platic (bottle) crates is not available in most places. Only one state (South Australia) has implemented the system for empty bottles. ==Electrical== * 240V AC @ 50Hz with a flush plate connection socket. * In 2011 a bill was passed to prevent the sale of any incandescent light bulbs. Regardless whether these are better or worse for the environment, you will not be able to buy any traditional light bulbs. * most household light sockets are B22d (bajonet) but you can still find E-27 (screw) fittings as well. ==Trains== * Cheap fares on the regular CityRail lines. A weekday return ticket from Newcastle to Sydney (160km) is around $16 for an adult (2012 prices). ==Prices== * Unleaded Regular Petrol costs about $1.45/l (premium $1.65, gas $.., diesel $..) * The Australian dollar was 'above parity' with the USD for most of 2011 and is now around 99 USD-cents (May 2012). ==Electoral System=== In 2019 the Australian government held Federal Elections. The party called 'The Greens' received 10.4% of the votes from 14.2 million eligible voters (they received 1.48 million votes). There are 151 seats in the House of Representatives, so 10.4% of 151 is 15.7. You would think they received 15 or 16 seats, but guess what.. they only received 1. WHAT??? Yes, just one seat. To me, that is not democratic. ==Road== * As per the British system, traffic keeps left. * Despite many signs indicating 'keep left unless overtaking', most drivers keep driving in the middle or right lanes. * Most Australians are never agressive or impatient until they drive a car. * Periodic road-safety tests for rego renewal do not check for engine emissions. ==Pedestrians== * as on the road, keep left when walking. You'll cause awkward situations and bump into people if you dont'. ==Language== * Slang: pluggers (flip flops, thongs), howyergoing (not too well, "I felt a bit howyergoing"), nail (cigarette), damage beers (drink beer). * Apart from the expected slang there are also some words that are used to 'culture up' some common day products: Medley (combination of various food products), Gourmet (special, in any form), rustic (rural), salsa (like Medley), Boutique (special) ffaebf790f0cdc0954c4c26b684a1b9bff7b2847 3707 3706 2024-06-26T07:10:27Z Admin 1 wikitext text/x-wiki In 2001 I immigrated from the Netherlands to Australia. Since then I have worked and lived in various places. During this time I noticed some interesting details of the Australian land and culture that were not be obvious at first. You may find these details useful when visiting Australia as a tourist. This page further describes some of those details. Some if them are supposed to be funny, so have a chuckle! :-) ==Housing== * Most rent is charged per week or per fortnight * Many houses are not built with insulation in mind. * Be sure to find single-glasing, gaps around most doors and no hallway as a wind-buffer. * Most houses do not have central heating so a small electric heater or putting on an extra jumper are your options if a reverse-cycle air-conditioning system is not installed. * Door handles are often knobs, making them unusable for people that have poor grip strentgh. * Many mailboxes are too small to receive a straight A4 sheet mail pieces ==Working== * Most salaries are paid weekly or fortnightly. * Staff birthdays are usually ignored. ==Cities== * Garbage is collected even on public holidays such as Christmas day and New Year's day. * Street names are not unique in a city (e.g. in Newcastle, there is a George Street in Mayfield East, Wallsend, North Lambton, Tighes Hill and Highfields) ==Food== * Meat pies is a common food available in most road cafe's. It's a meat-filled pastry mini-pie, to be eaten hot, and can be served as-is or with a mushy peas/mash potato/gravy dressing. * Recycling of cans (glass, plastic or aluminium) and platic (bottle) crates is not available in most places. Only one state (South Australia) has implemented the system for empty bottles. ==Electrical== * 240V AC @ 50Hz with a flush plate connection socket. * In 2011 a bill was passed to prevent the sale of any incandescent light bulbs. Regardless whether these are better or worse for the environment, you will not be able to buy any traditional light bulbs. * most household light sockets are B22d (bajonet) but you can still find E-27 (screw) fittings as well. ==Trains== * Cheap fares on the regular CityRail lines. A weekday return ticket from Newcastle to Sydney (160km) is around $16 for an adult (2012 prices). ==Prices== * Unleaded Regular Petrol costs about $1.45/l (premium $1.65, gas $.., diesel $..) * The Australian dollar was 'above parity' with the USD for most of 2011 and is now around 99 USD-cents (May 2012). ==Electoral System== In 2019 the Australian government held Federal Elections. The party called 'The Greens' received 10.4% of the votes from 14.2 million eligible voters (they received 1.48 million votes). There are 151 seats in the House of Representatives, so 10.4% of 151 is 15.7. You would think they received 15 or 16 seats, but guess what.. they only received 1. WHAT??? Yes, just one seat. To me, that is not democratic. ==Road== * As per the British system, traffic keeps left. * Despite many signs indicating 'keep left unless overtaking', most drivers keep driving in the middle or right lanes. * Most Australians are never agressive or impatient until they drive a car. * Periodic road-safety tests for rego renewal do not check for engine emissions. ==Pedestrians== * as on the road, keep left when walking. You'll cause awkward situations and bump into people if you dont'. ==Language== * Slang: pluggers (flip flops, thongs), howyergoing (not too well, "I felt a bit howyergoing"), nail (cigarette), damage beers (drink beer). * Apart from the expected slang there are also some words that are used to 'culture up' some common day products: Medley (combination of various food products), Gourmet (special, in any form), rustic (rural), salsa (like Medley), Boutique (special) df11c1753c392873e121b7e67f77fe12b4be8948 File:Julian-Free 2024-06-26.jpg 6 894 3708 2024-06-26T21:43:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Main Page 0 1 3709 3621 2024-06-26T21:44:04Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! [[File:Julian-Free 2024-06-26.jpg|right|link=File:Julian-Free 2024-06-26.jpg]] For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around December 2023. [[File:Kiwisdr-waterfall.jpg|left]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 0e3f7d9f481f12cda11e0b8cc50051ffc2d48616 3710 3709 2024-08-02T05:23:48Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around December 2023. [[File:Kiwisdr-waterfall.jpg|left]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ c63efc466a8217b382fb4a4cebc58854f37ae3b8 Wifi-hotspot 0 895 3712 2024-11-04T10:05:28Z Admin 1 Created page with "experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to..." wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq (*) but instead use NetworkManager 064b26c7ef66ccf8723f2f98ab1ace0aef7d75e9 3713 3712 2024-11-04T10:07:13Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq (*) but instead use NetworkManager * you can safely uninstall ** NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. c009d876e9daa76281c559512fdafb0a1756a9a1 3714 3713 2024-11-04T10:12:00Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager * You can safely uninstall hostapd, dhcpcd, dhclient * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. 6fb4419e20077d2c7690dcf6d68a873fe14a2c6b 3715 3714 2024-11-04T10:25:51Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'type=hotspot', which really simplifies things, see example below (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. Troubleshooting If things don't work, try to get as much information as you can: <pre> # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow </pre> 8847ec7b569c7bee22298d0cb2d096e62415e6d5 3716 3715 2024-11-04T10:29:03Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'type=hotspot', which really simplifies things, see example below (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. Troubleshooting If things don't work, try to get as much information as you can: <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> </pre> f4d2972eaf916b0a9753934d909ed8655b80ddb4 3717 3716 2024-11-04T10:32:23Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'type=hotspot', which really simplifies things, see example below (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. Troubleshooting If things don't work, try to get as much information as you can: <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> efb495eb5d67a3b3956b9ad3bd132c523dd7fddb 3718 3717 2024-11-04T10:38:58Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'type=hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. Troubleshooting If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> Resources: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 568ed9df60650b57589f68f721aace3d82acd211 3719 3718 2024-11-04T10:46:58Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. Sample scripts: <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Troubleshooting If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> Resources: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 62f8cacadb1deb780b3b2837091841918fda3396 3720 3719 2024-11-04T10:48:50Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. Sample scripts: <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Troubleshooting If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> TODO: * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels Resources: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 7f61e5c05c42ab629eb8361bf066c2d59ce53428 3721 3720 2024-11-04T10:52:19Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. Sample scripts: <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Troubleshooting If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> TODO: * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels Resources: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 30909c64f0b25916c2d9d4635d239dbeb65ab7f1 3722 3721 2024-11-04T10:55:33Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. Sample scripts: <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Troubleshooting If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> TODO: * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) Resources: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 6ceacfdbb8d69a143a4ac368ecd5e8eafddfc83f 3723 3722 2024-11-04T10:57:55Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! lots of random info here, so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. Sample scripts: <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Troubleshooting If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> TODO: * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) Resources: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 624ddaaee4af99061b441710c57ae72fe439026e 3724 3723 2024-11-04T20:38:57Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. What's this about? The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. What I discovered: * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. Sample scripts: <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Troubleshooting If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> TODO: * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) Resources: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 88b03b384d11fba3a3796ecaf42e22a2285ad24e 3725 3724 2024-11-04T20:39:50Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I wanted to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 75f37486a35007e8be7eae7a3148d55ce51594db 3726 3725 2024-11-04T20:40:32Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I needed to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 009d23dcb718426233f6d89cd624039a92369f96 3727 3726 2024-11-04T20:49:15Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * it took 11 minutes to finally settle if it couldn't detect an Internet connection * the router I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I needed to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 05dcbf5114e212eda7f837266cf6c67091f25857 3728 3727 2024-11-04T20:50:16Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender took 11 minutes to finally settle if it couldn't detect an Internet connection * the device I wanted it to connect to was an ArchLinux box, configured as an access point, but every time I needed to reboot the Archlinux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 91800b8e96d5620cdf08852e2901247eb0cd25ca 3729 3728 2024-11-04T20:50:57Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it couldn't detect an Internet connection * the device I wanted it to connect to is a Linux box, configured as an access point, but every time I needed to reboot the Linux box, the range extender would lose its mind and it needed a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 171c1950d68831ab89eb0bc053a5e4b851b6277f 3730 3729 2024-11-04T20:51:57Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 59f4731efb6d163114b11bdd1e7ee79100816cd2 3731 3730 2024-11-04T20:54:12Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 7c3ad345e597a190a580eab6793e0847bb4b96ad 3732 3731 2024-11-04T20:56:10Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * A Hotspot is the same as an Access Point; they do the same things. * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 ac44f4bc18307fe5a530e1a86c6d0bc0933a21c9 3733 3732 2024-11-04T20:57:41Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 2be363495a945650c7ad6d5cf02312325fa111cf 3734 3733 2024-11-04T21:01:47Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" CONN="Hotspot" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 826cbc289695d68fd66f74c473cef320eb1dd66e Wifi-hotspot 0 895 3735 3734 2024-11-04T21:03:27Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use hostapd and dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP server * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 d4c193c7c8e7537a28ee04e62ffe83a877115d54 3736 3735 2024-11-04T21:05:13Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 b0638f796a69814a6797fe9d55d55e31f979403b 3737 3736 2024-11-04T21:07:06Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 bb4a1bb6cdd65b7f9513b8e29d76a8f19983b6dd 3738 3737 2024-11-04T21:08:57Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: Linux wifi dongles) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 61cb1d7063ac2ce5e03b86b8560854614041aa8b 3741 3738 2024-11-04T21:13:38Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: [[Linux wifi dongles]]) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 0a5d74cdd64df8f577cf7b81cb145ddba555d10f 3742 3741 2024-11-05T09:14:24Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: [[Linux wifi dongles]]) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> To setup port forwarding: <pre> # /etc/NetworkManager/dispatcher.d/pre-up/90-modify-nft-firewall # # example port forwarding from wlan0 to wlan1 for a vnc service # NOTE: adding -- prevents the shell thinking a negative value (-100) is an option to the nft command nft -- add chain ip nm-shared-wlan1 prerouting { type nat hook prerouting priority -100 \; } nft add rule nm-shared-wlan1 prerouting tcp dport 5901 dnat to 10.42.0.26 nft add rule nm-shared-wlan1 nat_postrouting ip daddr 10.42.0.26 masquerade </pre> To set some DHCP client address reservations: <pre> # /etc/NetworkManager/dnsmasq-shared.d/10-reserved-client-ip-addresses # (dhcp-host is referring to a client connecting to the wlan0 AP) dhcp-host=28:11:a8:f4:8d:91,10.42.0.26 </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * port forward so clients on HomeWifi can connect to clients on EXT wifi * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels * create DHCP reservation for client MAC (so it will always have the same IP) ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 3c78dd510dd362f5f075aaa6e920aedfce491eac 3743 3742 2024-11-05T09:16:46Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: [[Linux wifi dongles]]) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> To setup port forwarding: <pre> # /etc/NetworkManager/dispatcher.d/pre-up/90-modify-nft-firewall # # example port forwarding from wlan0 to wlan1 for a vnc service # NOTE: adding -- prevents the shell thinking a negative value (-100) is an option to the nft command nft -- add chain ip nm-shared-wlan1 prerouting { type nat hook prerouting priority -100 \; } nft add rule nm-shared-wlan1 prerouting tcp dport 5901 dnat to 10.42.0.26 nft add rule nm-shared-wlan1 nat_postrouting ip daddr 10.42.0.26 masquerade </pre> To set some DHCP client address reservations: <pre> # /etc/NetworkManager/dnsmasq-shared.d/10-reserved-client-ip-addresses # (dhcp-host is referring to a client connecting to the wlan0 AP) dhcp-host=28:11:a8:f4:8d:91,10.42.0.26 </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 64c1d05b9fc06c348c67d374ed176e1af4ff3d5c 3744 3743 2024-11-05T10:39:20Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: [[Linux wifi dongles]]) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== Create the normal client connection to another wifi router <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> Create the hotspot connection <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Setup port forwarding: <pre> # /etc/NetworkManager/dispatcher.d/pre-up/90-modify-nft-firewall nft flush ruleset nft -f - <<EOF table ip nm-shared-wlan1 { chain nat_postrouting { type nat hook postrouting priority srcnat; policy accept; ip saddr 10.42.0.0/24 ip daddr != 10.42.0.0/24 masquerade } chain filter_forward { type filter hook forward priority filter; policy accept; ip daddr 10.42.0.0/24 oifname "wlan1" iifname "wlan0" accept ip saddr 10.42.0.0/24 iifname "wlan1" oifname "wlan0" accept } chain prerouting { type nat hook prerouting priority dstnat; policy accept; tcp dport 5901 dnat to 10.42.0.26 } } EOF </pre> Setup client ip address reservations: <pre> # /etc/NetworkManager/dnsmasq-shared.d/10-reserved-client-ip-addresses dhcp-host=28:11:a8:f4:8d:91,10.42.0.26 dhcp-host=c0:55:12:da:f3:12,10.42.0.27 </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * autoconnect hotspot * 802.11n 20/40MHz bandwidth * different channels ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 b83bfaffe067b27da479952b3c3a32008bf6efaa 3745 3744 2024-11-06T01:06:38Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf, the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: [[Linux wifi dongles]]) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== Create the normal client connection to another wifi router <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> Create the hotspot connection <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Setup port forwarding: <pre> # /etc/NetworkManager/dispatcher.d/pre-up/90-modify-nft-firewall nft flush ruleset nft -f - <<EOF table ip nm-shared-wlan1 { chain nat_postrouting { type nat hook postrouting priority srcnat; policy accept; ip saddr 10.42.0.0/24 ip daddr != 10.42.0.0/24 masquerade } chain filter_forward { type filter hook forward priority filter; policy accept; ip daddr 10.42.0.0/24 oifname "wlan1" iifname "wlan0" accept ip saddr 10.42.0.0/24 iifname "wlan1" oifname "wlan0" accept } chain prerouting { type nat hook prerouting priority dstnat; policy accept; tcp dport 5901 dnat to 10.42.0.26 } } EOF </pre> Setup client ip address reservations: <pre> # /etc/NetworkManager/dnsmasq-shared.d/10-reserved-client-ip-addresses dhcp-host=28:11:a8:f4:8d:91,10.42.0.26 dhcp-host=c0:55:12:da:f3:12,10.42.0.27 </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * autoconnect hotspot (not with rc.local) * connect with 802.11n mode (ideally 40MHz bandwidth) * ability to set different wifi channels (if nearby congestion) * move from NAT to bridge (DHCP forward and everything on same subnet) * have AP_STA (Access Point + Client) on one network adapter ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 99bb61f7751e096e9bc3d37f03284bfcc02f9b0e 3746 3745 2024-11-06T11:14:20Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf; the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: [[Linux wifi dongles]]) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== Create the normal client connection to another wifi router <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> Create the hotspot connection <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Setup port forwarding: <pre> # /etc/NetworkManager/dispatcher.d/pre-up/90-modify-nft-firewall nft flush ruleset nft -f - <<EOF table ip nm-shared-wlan1 { chain nat_postrouting { type nat hook postrouting priority srcnat; policy accept; ip saddr 10.42.0.0/24 ip daddr != 10.42.0.0/24 masquerade } chain filter_forward { type filter hook forward priority filter; policy accept; ip daddr 10.42.0.0/24 oifname "wlan1" iifname "wlan0" accept ip saddr 10.42.0.0/24 iifname "wlan1" oifname "wlan0" accept } chain prerouting { type nat hook prerouting priority dstnat; policy accept; tcp dport 5901 dnat to 10.42.0.26 } } EOF </pre> Setup client ip address reservations: <pre> # /etc/NetworkManager/dnsmasq-shared.d/10-reserved-client-ip-addresses dhcp-host=28:11:a8:f4:8d:91,10.42.0.26 dhcp-host=c0:55:12:da:f3:12,10.42.0.27 </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * autoconnect hotspot (not with rc.local) * connect with 802.11n mode (ideally 40MHz bandwidth) * ability to set different wifi channels (if nearby congestion) * move from NAT to bridge (DHCP forward and everything on same subnet) * have AP_STA (Access Point + Client) on one network adapter ===Resources=== * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 c0531500c379f5853bbf274eb176674bfcc8c27f 3747 3746 2024-11-06T11:18:39Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf; the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: [[Linux wifi dongles]]) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. ===Sample scripts=== Create the normal client connection to another wifi router <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> Create the hotspot connection <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Setup port forwarding: <pre> # /etc/NetworkManager/dispatcher.d/pre-up/90-modify-nft-firewall nft flush ruleset nft -f - <<EOF table ip nm-shared-wlan1 { chain nat_postrouting { type nat hook postrouting priority srcnat; policy accept; ip saddr 10.42.0.0/24 ip daddr != 10.42.0.0/24 masquerade } chain filter_forward { type filter hook forward priority filter; policy accept; ip daddr 10.42.0.0/24 oifname "wlan1" iifname "wlan0" accept ip saddr 10.42.0.0/24 iifname "wlan1" oifname "wlan0" accept } chain prerouting { type nat hook prerouting priority dstnat; policy accept; tcp dport 5901 dnat to 10.42.0.26 } } EOF </pre> Setup client ip address reservations: <pre> # /etc/NetworkManager/dnsmasq-shared.d/10-reserved-client-ip-addresses dhcp-host=28:11:a8:f4:8d:91,10.42.0.26 dhcp-host=c0:55:12:da:f3:12,10.42.0.27 </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * autoconnect hotspot (not with rc.local) * connect with 802.11n mode (ideally 40MHz bandwidth) * ability to set different wifi channels (if nearby congestion) * move from NAT to bridge (DHCP forward and everything on same subnet) * have AP_STA (Access Point + Client) on one network adapter ===Resources=== General info: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 ce8768379eaa1d16d88596c041bb7b43a94e4e87 3749 3747 2024-11-07T00:34:27Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf; the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: [[Linux wifi dongles]]) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. [[File:Network-diagram-wifi-nat-router.png]] ===Sample scripts=== Create the normal client connection to another wifi router <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> Create the hotspot connection <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Setup port forwarding: <pre> # /etc/NetworkManager/dispatcher.d/pre-up/90-modify-nft-firewall nft flush ruleset nft -f - <<EOF table ip nm-shared-wlan1 { chain nat_postrouting { type nat hook postrouting priority srcnat; policy accept; ip saddr 10.42.0.0/24 ip daddr != 10.42.0.0/24 masquerade } chain filter_forward { type filter hook forward priority filter; policy accept; ip daddr 10.42.0.0/24 oifname "wlan1" iifname "wlan0" accept ip saddr 10.42.0.0/24 iifname "wlan1" oifname "wlan0" accept } chain prerouting { type nat hook prerouting priority dstnat; policy accept; tcp dport 5901 dnat to 10.42.0.26 } } EOF </pre> Setup client ip address reservations: <pre> # /etc/NetworkManager/dnsmasq-shared.d/10-reserved-client-ip-addresses dhcp-host=28:11:a8:f4:8d:91,10.42.0.26 dhcp-host=c0:55:12:da:f3:12,10.42.0.27 </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log-level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * autoconnect hotspot (not with rc.local) * connect with 802.11n mode (ideally 40MHz bandwidth) * ability to set different wifi channels (if nearby congestion) * move from NAT to bridge (DHCP forward and everything on same subnet) * have AP_STA (Access Point + Client) on one network adapter ===Resources=== General info: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 8f0ed3417e0b451641beb64927c7b824e748bfbe 3750 3749 2024-11-08T03:23:42Z Admin 1 wikitext text/x-wiki experimental setup, use at your own risk! Lots of random info here, just so I have a central place to keep configs, tips, links, etc.. ===What's this about?=== The wireless range extender I bought (D-Link DAP-1530) didn't quite work the way I wanted with the systems I was using: * after boot-up, the extender takes 11 minutes to finally settle if it can't detect an Internet connection * the device I wanted it to connect to is a Linux box that is configured as an access point, but every time I need to reboot the Linux box, the range extender loses its mind and needs a cold restart to regain connectivity with the Linux box. These issues made me look at rolling my own wifi extender using a raspberry pi. ===What I discovered=== There are a lot of articles and howto's on setting up a shared hotspot, but many of them use several components (hostapd, dhcpcd, resolveconf, wpa_supplicant, dnsmasq) that all need to be talking to each other the right way. With too many variables, many things can go wrong. Although these solutions may work, the simplicity of a more integrated network managing system like NetworkManager makes a lot more sense to me. The setup below still uses wpa_supplicant and dnsmasq alongside NetworkManager, but the work to get it set up is way less. * Terminology: a Hotspot is the same as an Access Point; they do the same things. * Don't use iwd, hostapd or dnsmasq(*) but instead use NetworkManager; it's the modern way to manage network configurations * You can safely uninstall iwd, hostapd, dhcpcd, dhclient as NetworkManager has a built-in DHCP and DNS server and can set up Access Points just fine * You do not need any editing in /etc/network/interfaces and friends * You do not need /etc/hostapd*, or /etc/dhcpcd*, or /etc/dnsmasq* files * You do not need resolvconf; the systemd installed version of systemd-resolved is fine and is used by NetworkManager * The out-of-the-box NetworkManager does not need any further config files (I'm looking at you /etc/NetworkManager/conf.d/dns.conf with your dns=dnsmasq) * Running a wifi-client and an Access Point on the same network card (it's called AP-STA) may be possible, but try with two separate adapters first * learn the basic commands of nmcli; it's a very nice tool to manipulate the network configurations * NetworkManager uses simple key-files which are in plain text readable ascii * If you want to manually edit any of the configurations files under /etc/NetworkManager be sure to load the new config with nmcli general reload * the creation of a hotspot with NetworkManager has it's own shortcut 'wifi hotspot', which really simplifies things, see example below * You do not need to put any additional configuration in /etc/wpa_supplicant/* (the default wpa_supplicant.conf is fine) * once the hotspot has been configured it does not load up automatically, do this from /etc/rc.local (maybe use autoconnect=yes?) * the setup created by the scripts shown below creates a NAT-shared wifi extender; i.e. the clients will be on a completely different subnet than the HomeWifi network * when the AP (connects to the HomeWifi) and the hotspot (broadcasts its own SSID) are running, you should have two green/connected lines in nmcli con (if using two adapters) * Use a USB Wireless adapter that is supported by the Linux kernel out of the box, otherwise you'll have to compile the drivers for it (doable, example: [[Linux wifi dongles]]) (*) NetworkManager does use the dnsmasq binary, but it only needs dnsmasq-base and the dnsmasq systemd service should be set to masked/disabled/stopped. So far I have only been using 2.4Ghz 802.11 bg modes. This is probably less efficient than n mode, but for now I'm documenting just bg mode. [[File:Network-diagram-wifi-nat-router.png]] ===Sample scripts=== Create the normal client connection to another wifi router <pre> # use this to create a wifi connection using wlan0 to connect to your Internet-connected home wifi network SSID="HomeWifi" IF="wlan0" nmcli con add con-name $SSID type wifi ssid $SSID ifname $IF nmcli con mod $SSID 802-11-wireless-security.key-mgmt WPA-PSK nmcli con mod $SSID 802-11-wireless-security.psk "secretpassword" </pre> Create the hotspot connection <pre> # use this to create a hotspot (aka Access Point) using wlan1 so other wireless clients can connect and use the internet from wlan0 # WPA-PSK is implied with 'wifi hotspot' IF="wlan1" SSID="HomeWifi-EXT" nmcli dev wifi hotspot ssid $SSID password "secretpasswordext" ifname $IF band bg </pre> Setup port forwarding: <pre> # /etc/NetworkManager/dispatcher.d/pre-up/90-modify-nft-firewall nft flush ruleset nft -f - <<EOF table ip nm-shared-wlan1 { chain nat_postrouting { type nat hook postrouting priority srcnat; policy accept; ip saddr 10.42.0.0/24 ip daddr != 10.42.0.0/24 masquerade } chain filter_forward { type filter hook forward priority filter; policy accept; ip daddr 10.42.0.0/24 oifname "wlan1" iifname "wlan0" accept ip saddr 10.42.0.0/24 iifname "wlan1" oifname "wlan0" accept } chain prerouting { type nat hook prerouting priority dstnat; policy accept; tcp dport 5901 dnat to 10.42.0.26 } } EOF </pre> Setup client ip address reservations: <pre> # /etc/NetworkManager/dnsmasq-shared.d/10-reserved-client-ip-addresses dhcp-host=28:11:a8:f4:8d:91,10.42.0.26 dhcp-host=c0:55:12:da:f3:12,10.42.0.27 </pre> ===Troubleshooting=== If things don't work, try to get as much information as you can: <pre> # show all wireless interfaces iwconfig # show currently configured adapters ip a # show default route ip route </pre> <pre> wpa_cli -i <interface> log_level debug # show lots of activity # show logs (-f or --follow) as they get produced journalctl -u NetworkManager -u wpa_supplicant -u systemd-networkd --follow wpa_cli -i <interface> log-level info # default (not sure if it has to be set back) </pre> Check country and permitted wifi bands/frequencies: <pre> iw reg get iw reg set <CC> iw phy phy0 info </pre> <pre> # /etc/NetworkManager/conf.d/99-wifi.conf # disable mac address randomization (optional, I didn't have to disable it on my system) [device-wifi-no-scan-mac-rand] wifi.scan-rand-mac-address=no </pre> <pre> # show DHCP leases obtained by clients on the wlan1 network: cat /var/lib/NetworkManager/dnsmasq-wlan1.leases </pre> <pre> # show netfilter ip rules nft list ruleset </pre> ===TODO=== * autoconnect hotspot (not with rc.local) * connect with 802.11n mode (ideally 40MHz bandwidth) * ability to set different wifi channels (if nearby congestion) * move from NAT to bridge (DHCP forward and everything on same subnet) * have AP_STA (Access Point + Client) on one network adapter ===Resources=== General info: * https://www.raspberrypi.com/tutorials/host-a-hotel-wifi-hotspot/ * https://wiki.archlinux.org/title/Software_access_point * https://wiki.archlinux.org/title/NetworkManager Troubleshooting: * https://unix.stackexchange.com/questions/612498/hotspot-network-creation-took-too-long-and-failed-activation * https://github.com/raspberrypi/bookworm-feedback/issues/220 4e7839730ffbafd4e3dcba5527c04542ad64cc1c Linux info 0 25 3739 3711 2024-11-04T21:09:21Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] [[vim-cheatsheet]] [[systemd-tips]] [[vnc]] [[git]] [[bash-examples]] [[archlinux]] [[Linux wifi dongles]] [[wifi-hotspot]] c7ae2b68b4871d8cbac2ae042a23ae38c9f49e1a Linux wifi dongles 0 896 3740 2024-11-04T21:12:47Z Admin 1 Created page with "Compile instructions for Linux WiFi dongles It can be as simple as this: <pre> apt-get install raspberrypi-kernel-headers build-essential bc dkms git git clone https://github.com/morrownr/8821cu-20210916.git cd ~/src/8821cu-20210916 sudo ./install-driver.sh </pre>" wikitext text/x-wiki Compile instructions for Linux WiFi dongles It can be as simple as this: <pre> apt-get install raspberrypi-kernel-headers build-essential bc dkms git git clone https://github.com/morrownr/8821cu-20210916.git cd ~/src/8821cu-20210916 sudo ./install-driver.sh </pre> 51737a0c746b4824c3a35055416530992e7b2e0c File:Network-diagram-wifi-nat-router.png 6 897 3748 2024-11-07T00:34:03Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Main Page 0 1 3751 3710 2024-12-22T11:59:14Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Astrophotography]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around December 2023. [[File:Kiwisdr-waterfall.jpg|left]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 559f3fe714d86b6a96cd98fd3e9e36a95846f568 3775 3751 2025-01-02T04:05:07Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Astronomy]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around December 2023. [[File:Kiwisdr-waterfall.jpg|left]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 64a05b8b68bd9eebe39a21b36510148e90c50b18 File:Comet Leonard 2021-12-30.jpg 6 898 3752 2024-12-22T12:00:14Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Astrophotography 0 899 3753 2024-12-22T12:00:27Z Admin 1 Created page with "Gallery: [[File:Comet Leonard 2021-12-30.jpg]]" wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg]] f7f0187af6649f8587137843e609e1a186cbac10 3761 3753 2024-12-22T12:04:30Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg]] [[File:NGC362 glob MeadeLT6 180sec 29kly.jpg]] a88cdb820820cce05790f134a1094043920293bd 3762 3761 2024-12-23T06:15:15Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC5128 Centaurus-A]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC253 Sculptor Galaxy]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC2070 Tarantula Nebula]] [[File:NGC362 glob MeadeLT6 180sec 29kly.jpg|400px|thumb|none|NGC362 Globular Cluster in Small Magellanic Cloud]] 3534733592cbfd5ec066ab20b6153b0d6e2918e0 3764 3762 2024-12-25T01:11:36Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC5128 Centaurus-A]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC253 Sculptor Galaxy]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC2070 Tarantula Nebula]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC362 Globular Cluster in Small Magellanic Cloud]] 943855825bc3978d59c7eca99e40d9fbdbb27d65 3765 3764 2024-12-25T01:12:28Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC5128 Centaurus-A]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC253 Sculptor Galaxy]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC2070 Tarantula Nebula in the Large Magellanic Cloud]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC362 Globular Cluster in the Small Magellanic Cloud]] 38108410bba15be2259a76ce4dc53952b9284034 3767 3765 2024-12-25T21:01:41Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster in the Small Magellanic Cloud]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365]] b774894184a2c0b5c7dcc5424ae9081a31ef0d1c 3768 3767 2024-12-25T21:05:29Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster in the Small Magellanic Cloud (160,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly))]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 60c1a82fcb27ca62c2a804787df227755ba4b355 3769 3768 2024-12-25T21:06:46Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly))]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] a07d43f057e3063519a6f49349e45312d9e0c7ba 3770 3769 2024-12-25T21:07:24Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 9e73673afc4a59dc4a25d50ec147a0a16800adeb 3772 3770 2024-12-25T21:14:53Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] f9549040b474f910661bf74a5b777f50c609652f 3774 3772 2024-12-26T23:55:10Z Admin 1 wikitext text/x-wiki Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 9c284e69fd7cc9fc756dede627b2961042de1f9e 3782 3774 2025-01-02T04:19:21Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with my current [[Telescope]]. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 69f0e347939dcf7c169cbbcff08c3b7e14f7f869 3783 3782 2025-01-02T04:19:41Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 80fb1de38bbe9b88ae75bfb8788995f2af5f0f94 3784 3783 2025-01-02T04:20:58Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 5c6fa195e4ee313be161b1dc2ae48b2082443e0b File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg 6 900 3754 2024-12-22T12:00:54Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg 6 901 3755 2024-12-22T12:01:23Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg 6 902 3756 2024-12-22T12:01:49Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg 6 903 3757 2024-12-22T12:02:26Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg 6 904 3758 2024-12-22T12:02:51Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg 6 905 3759 2024-12-22T12:03:35Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NGC362 glob MeadeLT6 180sec 29kly.jpg 6 906 3760 2024-12-22T12:04:16Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg 6 907 3763 2024-12-25T01:11:02Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg 6 908 3766 2024-12-25T21:00:24Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg 6 909 3771 2024-12-25T21:13:55Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg 6 910 3773 2024-12-26T23:53:48Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Astronomy 0 911 3776 2025-01-02T04:05:47Z Admin 1 Created page with " A collection of photo's I made with a 6" SCT: * [[Astrophotography]]" wikitext text/x-wiki A collection of photo's I made with a 6" SCT: * [[Astrophotography]] a2bf29aa172ea45455bea5c647b2b9aa23f9ad34 3778 3776 2025-01-02T04:10:29Z Admin 1 wikitext text/x-wiki A collection of photo's I made with a 6" SCT: * [[Astrophotography]] My main telescope setup: * [[Telescopes]] b7ccea7a39d2b9215ce05f5048288de1ac6350be File:Meade-LT6-SV165-MeleQ3-ZWO-EAF-SV505C-QHY715C-HEQ5.jpg 6 912 3777 2025-01-02T04:09:29Z Admin 1 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Telescopes 0 913 3779 2025-01-02T04:10:41Z Admin 1 Created page with " [[File:Meade-LT6-SV165-MeleQ3-ZWO-EAF-SV505C-QHY715C-HEQ5.jpg]]" wikitext text/x-wiki [[File:Meade-LT6-SV165-MeleQ3-ZWO-EAF-SV505C-QHY715C-HEQ5.jpg]] 8d8dac9a2859674d663efc35e133b3b8aa2b576d 3780 3779 2025-01-02T04:12:54Z Admin 1 wikitext text/x-wiki This is my current telescope setup: The main scope is a 6" diameter (15cm) Schmidt-Cassegrain with a focal length of 1524mm. Just visible at the back is a much smaller 4cm diameter guide scope with a focal length of 160mm. [[File:Meade-LT6-SV165-MeleQ3-ZWO-EAF-SV505C-QHY715C-HEQ5.jpg]] 11df9fce41d75eb6b6876c2058acbc2a7436e3ae 3781 3780 2025-01-02T04:17:17Z Admin 1 wikitext text/x-wiki This is my current telescope setup: The main scope is a 6" diameter (15cm) Schmidt-Cassegrain with a focal length of 1524mm. Just visible at the back is a much smaller 4cm diameter guide scope with a focal length of 160mm. The red box at the end is an automatic focuser and is attached to the scope's focusing knob. Underneath that, at the end of the optical path is the main camera, an SV505C (resolution 2712 x 1538 pixels) Underneath that, with the round cable, is a small computer which allows me to fully operate this rig remotely. The white contraption underneath is a SkyWatcher HEQ-5 Pro mount. This helps to counteract the earth's rotation so that objects remain fixed in the camera. [[File:Meade-LT6-SV165-MeleQ3-ZWO-EAF-SV505C-QHY715C-HEQ5.jpg]] b8cc5865503b8f64f2360b02e7b4ba222c1c4e7e Astrophotography 0 899 3785 3784 2025-01-02T04:21:38Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun (7 light-minutes)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 19db6cc2e20a7810a9ee61180602dc76c57b6b75 3786 3785 2025-01-02T04:27:44Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun (0.000012 ly, 114M km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 480c14a7e5d61c0391f67dcfa589b70ea4903a1f 3787 3786 2025-01-02T04:32:50Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. Gallery: [[File:Comet Leonard 2023-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun (0.000023 ly, 300M km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 7f5baab135aa46f881eff34b719f913a62f78bde 3788 3787 2025-01-02T04:33:17Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun (0.000023 ly, 300M km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] f718e7edf52153c275e3d57dfc5e3066b9f97f10 3789 3788 2025-01-02T04:40:50Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. Objects with a distance of less than 2,000 light years are in close vicinity to our own solar system and in the same milky way 'Orion' arm. The next arm closer to the core of our milky way is the Sagittarius arm (about 4,000 - 7,000 light years from earth) The center of our galaxy is believed to be around 26,000 light years away from us. The total diameter of our galaxy is around 100,000 light years. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun (0.000023 ly, 300M km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 96bbb0b68cf58e78389608e82a221a47799d4621 3790 3789 2025-01-02T04:51:38Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. For context, to see where these objects are located: Objects with a distance of less than 2,000 light years are in close vicinity to our own solar system and in the same milky way 'Orion' arm. The next arm closer to the core of our milky way is the Sagittarius arm (about 4,000 - 7,000 light years from earth) The center of our galaxy is believed to be around 26,000 light years away from us. The total diameter of our galaxy is around 100,000 light years. Some of the nearest galaxies are still very close to our own milky way, but at a distance of about the diameter of our own milky way we find the Large Magellanic cloud. The nearest well-formed spiral galaxy is Andromeda at about 2.5 Million light years from us. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun (0.000023 ly, 300M km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 172adf73730b41bb12e5eaff18852f82435ad906 3791 3790 2025-01-02T04:54:26Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. For context, to see where these objects are located: Objects with a distance of less than 2,000 light years are in close vicinity to our own solar system and in the same milky way 'Orion' arm. The next arm closer to the core of our milky way is the Sagittarius arm (about 4,000 - 7,000 light years from earth) The center of our galaxy is believed to be around 26,000 light years away from us. The total diameter of our galaxy is around 100,000 light years. Some of the nearest galaxies are still very close to our own milky way, but at a distance of about the diameter of our own milky way we find the Large Magellanic cloud. The nearest well-formed spiral galaxy is Andromeda at about 2.5 Million light years from us. All the big individual stars you see in photos of galaxies are still from our own milky way, they appear as flies on a windscreen. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun (0.000023 ly, 300M km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] f4b99a810292dae4721f886842e72da635552a44 3792 3791 2025-01-02T04:56:07Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. For context, to see where these objects are located: Objects with a distance of less than 2,000 light years are in close vicinity to our own solar system and in the same milky way 'Orion' arm. Most of the nearby objects are Nebulas and they are made up from clouds of dust and gases. They are lit up in various colours by nearby stars. The next arm closer to the core of our milky way is the Sagittarius arm (about 4,000 - 7,000 light years from earth) The center of our galaxy is believed to be around 26,000 light years away from us. The total diameter of our galaxy is around 100,000 light years. Some of the nearest galaxies are still very close to our own milky way, but at a distance of about the diameter of our own milky way we find the Large Magellanic cloud. The nearest well-formed spiral galaxy is Andromeda at about 2.5 Million light years from us. All the big individual stars you see in photos of galaxies are still from our own milky way, they appear as flies on a windscreen. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun (0.000023 ly, 300M km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] bf6d2086fa20575a13fe2be24d88d7332ea475be 3793 3792 2025-01-02T04:58:04Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. For context, to see where these objects are located: Objects with a distance of less than 2,000 light years are in close vicinity to our own solar system and in the same milky way 'Orion' arm. Most of the nearby objects are Nebulas and they contain clouds of dust and gas. They are lit up in various colours by nearby stars. The next arm closer to the core of our milky way is the Sagittarius arm (about 4,000 - 7,000 light years from earth) The center of our galaxy is believed to be around 26,000 light years away from us. The total diameter of our galaxy is around 100,000 light years. Some of the nearest galaxies are still very close to our own milky way, but at a distance of about the diameter of our own milky way we find the Large Magellanic cloud. The nearest well-formed spiral galaxy is Andromeda at about 2.5 Million light years from us. All the big individual stars you see in photos of galaxies are still from our own milky way, they appear as flies on a windscreen. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet Leonard, approaching our sun (0.000023 ly, 300M km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] ea58926e0d131b25ae9ad97d240923b00d609e19 3794 3793 2025-01-03T03:08:50Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. For context, to see where these objects are located: Objects with a distance of less than 2,000 light years are in close vicinity to our own solar system and in the same milky way 'Orion' arm. Most of the nearby objects are Nebulas and they contain clouds of dust and gas. They are lit up in various colours by nearby stars. The next arm closer to the core of our milky way is the Sagittarius arm (about 4,000 - 7,000 light years from earth) The center of our galaxy is believed to be around 26,000 light years away from us. The total diameter of our galaxy is around 100,000 light years. Some of the nearest galaxies are still very close to our own milky way, but at a distance of about the diameter of our own milky way we find the Large Magellanic cloud. The nearest well-formed spiral galaxy is Andromeda at about 2.5 Million light years from us. All the big individual stars you see in photos of galaxies are still from our own milky way, they appear as flies on a windscreen. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet C/2021 A1 (Leonard), approaching our sun (0.000023 ly, 127M km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] 1ab90c70bcdef28d35ffbb350b1e0915fb65f0ce 3795 3794 2025-01-03T03:10:06Z Admin 1 wikitext text/x-wiki All of these images were taken by me, most with one of my [[Telescopes]]. The distance to each object is given in light-years from earth. For context, to see where these objects are located: Objects with a distance of less than 2,000 light years are in close vicinity to our own solar system and in the same milky way 'Orion' arm. Most of the nearby objects are Nebulas and they contain clouds of dust and gas. They are lit up in various colours by nearby stars. The next arm closer to the core of our milky way is the Sagittarius arm (about 4,000 - 7,000 light years from earth) The center of our galaxy is believed to be around 26,000 light years away from us. The total diameter of our galaxy is around 100,000 light years. Some of the nearest galaxies are still very close to our own milky way, but at a distance of about the diameter of our own milky way we find the Large Magellanic cloud. The nearest well-formed spiral galaxy is Andromeda at about 2.5 Million light years from us. All the big individual stars you see in photos of galaxies are still from our own milky way, they appear as flies on a windscreen. Gallery: [[File:Comet Leonard 2021-12-30.jpg|400px|thumb|none|Comet C/2021 A1 (Leonard), approaching our sun (0.000013 ly, 127 million km)]] [[File:M42 2024-03-24 8-inch-F4-QHY715C 100s 1500ly.jpg|400px|thumb|none|M42 Orion Nebula (1,500 ly)]] [[File:M20-2023-07-09 8inchNewt-D1100-trifid small 4kly.jpg|400px|thumb|none|M20 Trifid Nebula (4,000 ly)]] [[File:NGC 3372 2024-03-26 Eta-carina center-stars 8-inch-F4 QHY715C 60s 9kly.jpg|400px|thumb|none|Eta Carina nebula (9,000 ly)]] [[File:NGC 362 2024-12-23 globular cluster SMC 510sec LT6 SV505 bin2.jpg|400px|thumb|none|NGC 362 Globular Cluster (29,000 ly)]] [[File:NGC2070 2024-12-22 tarantula LT6 SV505C 30m 160kly.jpg|400px|thumb|none|NGC 2070 Tarantula Nebula in the Large Magellanic Cloud (160,000 ly)]] [[File:NGC 1313 2024-12-26 LT6ACF SV505C 2x2 g100 50mins 10Mly.jpg|400px|thumb|none|NGC 1313 Topsy Turvy Galaxy (10 Million ly)]] [[File:NGC253 2024-11-23 Sculptor LT6 SV505 57x30sec 28min 11Mly.jpg|400px|thumb|none|NGC 253 Sculptor Galaxy (11 Million ly)]] [[File:NGC5128 2024-05-19 Centaurus-A MeadeLT6 F10 SV505C 60min 12Mly.jpg|400px|thumb|none|NGC 5128 Centaurus-A (12 Million ly)]] [[File:M83 2024-04-28 MeadeLT6 SV505C southern-pinwheel 42mins 15Mly.jpg|400px|thumb|none|M83 Southern Pinwheel Galaxy (15 Million ly)]] [[File:NGC 1365 2024-12-25 LT6ACF SV505C 30min (300s-bin2-g100-o10) 56Mly.jpg|400px|thumb|none|NGC 1365 (56 Million ly)]] f4f3f205ddf4fb28542e14f6283a40da51896cc0 Resize Root Filesystem 0 266 3796 3496 2025-01-08T02:01:24Z Admin 1 wikitext text/x-wiki This procedure details how to copy the current filesystem to a new disk. This is a preferred scenario when: *the current root filesystem is becoming too small *you wish to shrink the existing root filesystem (think vm's) Steps to achive the copy are: * create or attach a new disk * create a root (and swap partition) on the disk (fdisk /dev/...) * format the disk with EXT2 * mount the disk to a directory on the live system * copy all files to the new disk * copy the special device files (?) * chroot into the new disk * install the bootloader to the MBR of the new disk Copy command: <pre> (cd / ; tar -cf - . --one-file-system) | (cd /mnt/ ; tar xvfpB -) </pre> Find out the new disk's UUID: <pre> ls -l /dev/disk/by-uuid/ </pre> * Update the new UUID in /etc/fstab * Update the new UUID in /boot/grub/grub.cfg Install bootloader: There are (as far as I know of) three ways of installing GRUB onto the new disk. 1 * After copying all files, remove the old drive and boot off a live Linux CD (e.g. Knoppix) (the idea here is that hd0 is the new drive and issuing the grub-install command will simply install on hd0. 2 * Swap the drives (master becomes slave, slave becomes master) and in the BIOS designate to boot of the second disk. (again, grub will install on hd0 which is the new disk) 3 * with the new disk attached as /dev/sdb, instruct GRUB to install there but to refer to it as /dev/sda (or hd0 as we want). (my preference) Method 1 and 2 http://www.linuxjournal.com/content/copy-your-linux-install-different-partition-or-drive Method 3 (with the new disk (/dev/sdb) still mounted at /mnt/) <pre> grub-install -d /mnt /dev/sdb -or- grub-install --target=i386-pc /dev/sdb </pre> * shutdown * take out old disk, and replace with the new disk as the primary boot disk * start the machine GRUB v1 only: When you're back in the O/S update the menu.lst to make sure the correct boot device (e.g. /dev/sda) is used. <pre> grub-install /dev/sda update-grub </pre> * reboot and all should be fine ===Resize Filesystem in an image=== So now you have a dd image of your disk and found out that the device you wish to restore it to is smaller in size... All good, what we do next is to resize the filesystem inside the dd image. Just to be sure we understand the terminology: * a block device is the physical capacity of a storage device (e.g. an 8GB Flash drive) * a partition is a logical storage container that is created on the block device. A block device can hold multiple partitions. * a filesystem is a logical arrangement of data that is used by an operating system to save and read files. A partition usually holds only one filesystem. If we want to make a larger partition fit on a smaller partition we need to make sure that the used space inside the larger partition doesn't exceed the size of the smaller partition. Once we know this, the process is relatively simple: * attach a loop device to the disk-image (using losetup) * run a filesystem-check on the partition we wish to resize (using e2fsck) * shrink the filesystem to the desired size (using resize2fs) * shrink the partition to a size that is (slightly) larger than the filesystem After this, we can just write the disk image to the (smaller) block device without running into disk space issues The Process: Attach a loop device to the various partitions inside the disk image: <pre> losetup --find --partscan imagefile.dd </pre> Reveal the partition devices that were assigned: <pre> root@pi:/data# cat /proc/partitions major minor #blocks name 8 0 976762584 sda 8 1 53938206 sda1 8 2 51210240 sda2 8 3 48828416 sda3 8 4 822784000 sda4 11 0 1048575 sr0 7 0 7822336 loop0 <--- imagefile.dd 259 0 42811 loop0p1 <--- partition 1 inside imagefile.dd 259 1 7281664 loop0p2 <--- partition 2 inside imagefile.dd </pre> Run a filesystem check: <pre> root@pi:/data# e2fsck /dev/loop0p2 e2fsck 1.44.5 (15-Dec-2018) /dev/loop0p2 contains a file system with errors, check forced. Pass 1: Checking inodes, blocks, and sizes Inode 391641, i_blocks is 16, should be 8. Fix<y>? yes Inode 391642, i_blocks is 16, should be 8. Fix<y>? yes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Block bitmap differences: +(1393664--1393838) -(1394673--1394890) -(1612165--1612167) -1612891 -1612982 -(1615784--1615789) -1622693 -1622836 -1622855 -(1626336--1626342) -(1638720--1638734) -(1638841--1638851) -(1639248--1639258) -1665037 -1666053 -(1668096--1668097) Fix<y>? yes Free blocks count wrong for group #49 (4771, counted=4801). Fix<y>? yes Free blocks count wrong for group #50 (14121, counted=14151). Fix<y>? yes Free blocks count wrong (576554, counted=598442). Fix<y>? yes /dev/loop0p2: ***** FILE SYSTEM WAS MODIFIED ***** /dev/loop0p2: 262820/441728 files (0.3% non-contiguous), 1221974/1820416 blocks </pre> (so a few errors there, but you may not see any errors) Shrink the filesystem to the desired size: <pre> root@pi:/data# resize2fs /dev/loop0p2 7000M resize2fs 1.44.5 (15-Dec-2018) Resizing the filesystem on /dev/loop0p2 to 1792000 (4k) blocks. The filesystem on /dev/loop0p2 is now 1792000 (4k) blocks long. </pre> The filesystem should now be small enough to fit on our target block device. Since we no longer need to access the partitions inside the disk-image we can disconnect the loop devices from the disk image: <pre> losetup --detach /dev/loop0 </pre> Next, we shrink the partition to a size that is (slightly) larger than the filesystem we just shrunk. First, inspect the target block device and determine our start sector: <pre> root@pi:/data# fdisk -l /dev/sdb Disk /dev/sdb: 7.5 GiB, 8010072064 bytes, 15644672 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xed429e5a Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 93813 85622 41.8M c W95 FAT32 (LBA) </pre> Orginally, the start sector of the 2nd partition began at 94208 so we'll leave it at that. Then we need to calculate the end sector. The resize2fs command used a value of 7000M. In Bytes, this is: 7,000 * 1024 (k) * 1024 (B) = 7340032000 Bytes In 512-Byte blocks, this is: 7340032000 / 512 = 14336000 So the End-sector where this 7,000MB block needs to end is 94208 + 14336000 = 14430208 Let's add one more 512Byte block to give the filesystem enough room to fit in: 14430209 Then we can simply delete the partition from the block device and re-add it with the smaller size: <pre> root@pi:/data# cat /proc/partitions major minor #blocks name 8 0 976762584 sda <---- the disk of the system that we're currently working on 8 1 53938206 sda1 8 2 51210240 sda2 8 3 48828416 sda3 8 4 822784000 sda4 11 0 1048575 sr0 7 0 7822336 loop0 <---- the disk-image dd file 259 0 42811 loop0p1 259 1 7281664 loop0p2 <---- the partition containing the filesystem we have just shrunk 8 16 7822336 sdb <---- the target block device (an 8GB Flash drive) 8 17 42811 sdb1 <---- the first partition (we'd like to keep as-is) root@pi:/data# fdisk /dev/sdb <---- running fdisk on the target block device Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n <------ create a new partition (partition 2 was already gone) Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): 2 First sector (2048-15644671, default 2048): 94208 <----- where the original 2nd partition started Last sector, +/-sectors or +/-size{K,M,G,T,P} (94208-15644671, default 15644671): 14430209 <---- our calculated end sector Created a new partition 2 of type 'Linux' and of size 6.9 GiB. Partition #2 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o: y The signature will be removed by a write command. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@pi:/data# </pre> One final check: <pre> root@pi:/data# fdisk -l /dev/sdb Disk /dev/sdb: 7.5 GiB, 8010072064 bytes, 15644672 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xed429e5a Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 93813 85622 41.8M c W95 FAT32 (LBA) /dev/sdb2 94208 14430209 14336002 6.9G 83 Linux root@pi:/data# </pre> Now we have created a smaller partition on the target block device that is just large enough to hold the smaller filesystem. We can now write the disk-image dd file to the block device without running into disk space issues. <pre> dd if=diskimage.dd of=/dev/sdb bs=1M </pre> bbc132e64a4926108b9f207a4cd91877ee34d754 3797 3796 2025-01-08T02:08:32Z Admin 1 wikitext text/x-wiki This procedure details how to copy the current filesystem to a new disk. This is a preferred scenario when: *the current root filesystem is becoming too small *you wish to shrink the existing root filesystem (think vm's) Steps to achive the copy are: * create or attach a new disk * create a root (and swap partition) on the disk (fdisk /dev/...) * format the disk with EXT2 * mount the disk to a directory on the live system * copy all files to the new disk * copy the special device files (?) * chroot into the new disk * install the bootloader to the MBR of the new disk Copy command: <pre> (cd / ; tar -cf - . --one-file-system) | (cd /mnt/ ; tar xvfpB -) </pre> Find out the new disk's UUID: <pre> ls -l /dev/disk/by-uuid/ </pre> * Update the new UUID in /etc/fstab * Update the new UUID in /boot/grub/grub.cfg Install bootloader: There are (as far as I know of) three ways of installing GRUB onto the new disk. 1 * After copying all files, remove the old drive and boot off a live Linux CD (e.g. Knoppix) (the idea here is that hd0 is the new drive and issuing the grub-install command will simply install on hd0. 2 * Swap the drives (master becomes slave, slave becomes master) and in the BIOS designate to boot of the second disk. (again, grub will install on hd0 which is the new disk) 3 * with the new disk attached as /dev/sdb, instruct GRUB to install there but to refer to it as /dev/sda (or hd0 as we want). (my preference) Method 1 and 2 http://www.linuxjournal.com/content/copy-your-linux-install-different-partition-or-drive Method 3 (with the new disk (/dev/sdb) still mounted at /mnt/) <pre> grub-install -d /mnt /dev/sdb -or- grub-install --target=i386-pc /dev/sdb </pre> * shutdown * take out old disk, and replace with the new disk as the primary boot disk * start the machine GRUB v1 only: When you're back in the O/S update the menu.lst to make sure the correct boot device (e.g. /dev/sda) is used. <pre> grub-install /dev/sda update-grub </pre> * reboot and all should be fine Grub Rescue: if your system doesn't boot (maybe made a typo in the UUID) then enter this in the grub rescue prompt: <pre> ls (get the current disk details) set root=(hd0,msdos1) set prefix=(hd0,msdos1)/boot/grub insmod normal normal </pre> reboot, login and enter: <pre> grub-install /dev/sda update-grub </pre> ===Resize Filesystem in an image=== So now you have a dd image of your disk and found out that the device you wish to restore it to is smaller in size... All good, what we do next is to resize the filesystem inside the dd image. Just to be sure we understand the terminology: * a block device is the physical capacity of a storage device (e.g. an 8GB Flash drive) * a partition is a logical storage container that is created on the block device. A block device can hold multiple partitions. * a filesystem is a logical arrangement of data that is used by an operating system to save and read files. A partition usually holds only one filesystem. If we want to make a larger partition fit on a smaller partition we need to make sure that the used space inside the larger partition doesn't exceed the size of the smaller partition. Once we know this, the process is relatively simple: * attach a loop device to the disk-image (using losetup) * run a filesystem-check on the partition we wish to resize (using e2fsck) * shrink the filesystem to the desired size (using resize2fs) * shrink the partition to a size that is (slightly) larger than the filesystem After this, we can just write the disk image to the (smaller) block device without running into disk space issues The Process: Attach a loop device to the various partitions inside the disk image: <pre> losetup --find --partscan imagefile.dd </pre> Reveal the partition devices that were assigned: <pre> root@pi:/data# cat /proc/partitions major minor #blocks name 8 0 976762584 sda 8 1 53938206 sda1 8 2 51210240 sda2 8 3 48828416 sda3 8 4 822784000 sda4 11 0 1048575 sr0 7 0 7822336 loop0 <--- imagefile.dd 259 0 42811 loop0p1 <--- partition 1 inside imagefile.dd 259 1 7281664 loop0p2 <--- partition 2 inside imagefile.dd </pre> Run a filesystem check: <pre> root@pi:/data# e2fsck /dev/loop0p2 e2fsck 1.44.5 (15-Dec-2018) /dev/loop0p2 contains a file system with errors, check forced. Pass 1: Checking inodes, blocks, and sizes Inode 391641, i_blocks is 16, should be 8. Fix<y>? yes Inode 391642, i_blocks is 16, should be 8. Fix<y>? yes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Block bitmap differences: +(1393664--1393838) -(1394673--1394890) -(1612165--1612167) -1612891 -1612982 -(1615784--1615789) -1622693 -1622836 -1622855 -(1626336--1626342) -(1638720--1638734) -(1638841--1638851) -(1639248--1639258) -1665037 -1666053 -(1668096--1668097) Fix<y>? yes Free blocks count wrong for group #49 (4771, counted=4801). Fix<y>? yes Free blocks count wrong for group #50 (14121, counted=14151). Fix<y>? yes Free blocks count wrong (576554, counted=598442). Fix<y>? yes /dev/loop0p2: ***** FILE SYSTEM WAS MODIFIED ***** /dev/loop0p2: 262820/441728 files (0.3% non-contiguous), 1221974/1820416 blocks </pre> (so a few errors there, but you may not see any errors) Shrink the filesystem to the desired size: <pre> root@pi:/data# resize2fs /dev/loop0p2 7000M resize2fs 1.44.5 (15-Dec-2018) Resizing the filesystem on /dev/loop0p2 to 1792000 (4k) blocks. The filesystem on /dev/loop0p2 is now 1792000 (4k) blocks long. </pre> The filesystem should now be small enough to fit on our target block device. Since we no longer need to access the partitions inside the disk-image we can disconnect the loop devices from the disk image: <pre> losetup --detach /dev/loop0 </pre> Next, we shrink the partition to a size that is (slightly) larger than the filesystem we just shrunk. First, inspect the target block device and determine our start sector: <pre> root@pi:/data# fdisk -l /dev/sdb Disk /dev/sdb: 7.5 GiB, 8010072064 bytes, 15644672 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xed429e5a Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 93813 85622 41.8M c W95 FAT32 (LBA) </pre> Orginally, the start sector of the 2nd partition began at 94208 so we'll leave it at that. Then we need to calculate the end sector. The resize2fs command used a value of 7000M. In Bytes, this is: 7,000 * 1024 (k) * 1024 (B) = 7340032000 Bytes In 512-Byte blocks, this is: 7340032000 / 512 = 14336000 So the End-sector where this 7,000MB block needs to end is 94208 + 14336000 = 14430208 Let's add one more 512Byte block to give the filesystem enough room to fit in: 14430209 Then we can simply delete the partition from the block device and re-add it with the smaller size: <pre> root@pi:/data# cat /proc/partitions major minor #blocks name 8 0 976762584 sda <---- the disk of the system that we're currently working on 8 1 53938206 sda1 8 2 51210240 sda2 8 3 48828416 sda3 8 4 822784000 sda4 11 0 1048575 sr0 7 0 7822336 loop0 <---- the disk-image dd file 259 0 42811 loop0p1 259 1 7281664 loop0p2 <---- the partition containing the filesystem we have just shrunk 8 16 7822336 sdb <---- the target block device (an 8GB Flash drive) 8 17 42811 sdb1 <---- the first partition (we'd like to keep as-is) root@pi:/data# fdisk /dev/sdb <---- running fdisk on the target block device Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n <------ create a new partition (partition 2 was already gone) Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): 2 First sector (2048-15644671, default 2048): 94208 <----- where the original 2nd partition started Last sector, +/-sectors or +/-size{K,M,G,T,P} (94208-15644671, default 15644671): 14430209 <---- our calculated end sector Created a new partition 2 of type 'Linux' and of size 6.9 GiB. Partition #2 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o: y The signature will be removed by a write command. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@pi:/data# </pre> One final check: <pre> root@pi:/data# fdisk -l /dev/sdb Disk /dev/sdb: 7.5 GiB, 8010072064 bytes, 15644672 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xed429e5a Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 93813 85622 41.8M c W95 FAT32 (LBA) /dev/sdb2 94208 14430209 14336002 6.9G 83 Linux root@pi:/data# </pre> Now we have created a smaller partition on the target block device that is just large enough to hold the smaller filesystem. We can now write the disk-image dd file to the block device without running into disk space issues. <pre> dd if=diskimage.dd of=/dev/sdb bs=1M </pre> 01c7c92a86d9f78fa3566ec6352c14fd7ccccb52 Linux info 0 25 3798 3739 2025-02-10T10:14:26Z Admin 1 wikitext text/x-wiki hints and tips [http://tldp.org/ The Linux Documentation Project] [[samba-domain-controller]] [[Linux_Bash]] [[Single Board Computers]] [[Openvpn-setup]] [[StopDiskWrites]] [[Resize Root Filesystem]] [[Disk-Imaging]] [[dovecot-imapd]] [[wireless-setup]] [[sound-alsa]] [[console-colours]] [[rc-controller]] [[Linux-cli-intro]] [[Syncthing-share]] [[gtk-scroll-behaviour]] [[ffmpeg-examples]] [[vim-config]] [[vim-cheatsheet]] [[systemd-tips]] [[vnc]] [[git]] [[bash-examples]] [[archlinux]] [[Linux wifi dongles]] [[wifi-hotspot]] [[sound-effects]] b7a413db3c2d8df9c3ea60264a488f4bda8b3de3 Sound-effects 0 914 3799 2025-02-10T10:14:46Z Admin 1 Created page with " <pre> play -c2 -n synth whitenoise band -n 100 24 band -n 300 100 gain +20 </pre>" wikitext text/x-wiki <pre> play -c2 -n synth whitenoise band -n 100 24 band -n 300 100 gain +20 </pre> a7ecc4e802d63d3f2d178b6d3deb318322fec2e1 Amateur Radio 0 237 3800 3404 2025-03-16T09:26:27Z Admin 1 wikitext text/x-wiki [[File:Australian Band Plans 140709.pdf]] WIA - Australian Amateur Band Plans - updated 09/07/2014 * My entry on [http://www.qrz.com/db/VK2CEL www.qrz.com] * Some [[International contests]] * [[2018 VK Contest Dates]] (Phone) * [[2017 VK Contest Dates]] (Phone) * [[2016 VK Contest Dates]] (Phone) * [[2015 VK Contest Dates]] (Phone) * [[2014 VK Contest Dates]] (Phone) * [[2013 VK Contest Dates]] (Phone) * [[aprs]] * [[sdr]] * [[qrp]] (Low Power) * [[impedance matching]] * [[common mode interference]] * [[baluns]] * [[low-cost antenna shootout 70cm]] * [[Ionosphere]] * [[QCX-transceiver]] * Online Intermodulation Calculator: http://www.marcelpost.com/intermod/ * [[RS41]] Radiosonde STM32 fun * [[satellites]] c11c373be0dd254d3767f1ce4fb9bfee3abf2ba6 Satellites 0 915 3801 2025-03-16T09:33:53Z Admin 1 Created page with " <pre> NORAD Type Name uplink downlink details voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) SO-115 145.925 436.888 aka HADES 43017 voice AO-91 435.250 (+67Hz) 145.960 AO-92 PO-101 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> ===..." wikitext text/x-wiki <pre> NORAD Type Name uplink downlink details voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) SO-115 145.925 436.888 aka HADES 43017 voice AO-91 435.250 (+67Hz) 145.960 AO-92 PO-101 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect 01cf4bf61e16a1e4b7b75d9c33b465a34486a96d 3802 3801 2025-03-16T09:35:32Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites <pre> NORAD Status Type Name uplink downlink details voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) SO-115 145.925 436.888 aka HADES 43017 voice AO-91 435.250 (+67Hz) 145.960 AO-92 PO-101 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect 577d02484f01fcd549d059d580c9014bb6dcf0ce 3803 3802 2025-03-16T09:35:59Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites <pre> NORAD Status Type Name uplink downlink details ------------------------------------------------------------------------ voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) SO-115 145.925 436.888 aka HADES 43017 voice AO-91 435.250 (+67Hz) 145.960 AO-92 PO-101 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect 8694f91679f19e596fd0e0e324081f0eb45636e9 3804 3803 2025-03-16T09:36:42Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites <pre> NORAD Status Type Name uplink downlink details ------------------------------------------------------------------------ voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) SO-115 145.925 436.888 aka HADES 43017 voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT AO-92 PO-101 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect 8c4c291d9a27a4cf38d7a52d998e0728cc00cbbf 3805 3804 2025-03-16T09:37:04Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites <pre> NORAD Status Type Name uplink downlink details ------------------------------------------------------------------------ voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) SO-115 145.925 436.888 aka HADES 43017 voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT AO-92 PO-101 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect 16f195c9c8fb75399c50b8dc3991520a8f07612e 3806 3805 2025-03-16T09:39:02Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites <pre> NORAD Status Type Name uplink downlink details ------------------------------------------------------------------------ voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) SO-115 145.925 436.888 aka HADES 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT AO-92 PO-101 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect b52c650233ec160ac6a0df5ac581a39a1405b15e 3807 3806 2025-03-16T09:42:26Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) SO-115 145.925 436.888 aka HADES 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT AO-92 CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect 0b5e78e18f93a17f0949108af63fc616f6e62d50 3808 3807 2025-03-16T09:47:09Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT AO-92 CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 reentered voice,fsk SO-115 145.925 436.888 aka HADES </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect f0c91f4a607842d0b2df83ddfdc217e9460dfe7d 3809 3808 2025-03-16T09:52:08Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT AO-92 CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 </pre> ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 rpt stopped in Nov 2011 due to battery failure </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect 71fab295e73508c26a15f44b3cd1d427a343b8fc 3810 3809 2025-03-16T09:57:42Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT AO-92 CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 AO-85 problem with uplink, 5 Watt often not enough </pre> ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 rpt stopped in Nov 2011 due to battery failure </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. a72a76b29b475b0681d0fa285516d8f3a28fca41 3811 3810 2025-03-16T10:01:19Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT 43137 AO-92 435.350 (+67Hz) 145.880 aka FOX-1D CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 AO-85 problem with uplink, 5 Watt often not enough </pre> ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 rpt stopped in Nov 2011 due to battery failure </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 54b579fa831a216ba4a1d4ccd5cc22cb069db77a 3812 3811 2025-03-16T10:03:27Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 active voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT 43678 active CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 afsk AO-27 145.850 436.795 aka Eyesat Lilacsat-2 AO-85 problem with uplink, 5 Watt often not enough </pre> ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 rpt stopped in Nov 2011 due to battery failure 43137 inactive AO-92 435.350 (+67Hz) 145.880 aka FOX-1D, reentered </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. e7fdfd97f68f9a8c7d6bb91a3d03103523414ff1 3813 3812 2025-03-16T10:05:53Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 active voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT 43678 active CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 AFSK AO-27 145.850 436.795 aka Eyesat 40908 active AFSK/GFSK Lilacsat-2 144.350 beacon at 437.100 AO-85 problem with uplink, 5 Watt often not enough </pre> ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 rpt stopped in Nov 2011 due to battery failure 43137 inactive AO-92 435.350 (+67Hz) 145.880 aka FOX-1D, reentered </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 9efa1234c577b3157132e494df30945bd4606b17 3814 3813 2025-03-16T10:10:01Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 active voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT 43678 active CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 AFSK AO-27 145.850 436.795 aka Eyesat 40908 active AFSK/GFSK Lilacsat-2 144.350 144.390 beacon at 437.200 </pre> ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 transponder stopped in Nov 2011 due to battery failure 43137 inactive voice AO-92 435.350 (+67Hz) 145.880 aka FOX-1D, reentered 40967 inactive voice AO-85 435.182 145.980 aka FOX-1A, problem with uplink, 5 Watt often not enough </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. dc0404f7d0d83d842542adf3f1643d91ebd12718 3815 3814 2025-03-16T10:12:27Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 active voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT 43678 active CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 active AFSK AO-27 145.850 436.795 aka Eyesat-1 40908 active AFSK/GFSK Lilacsat-2 144.350 144.390 beacon at 437.200 </pre> ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 transponder stopped in Nov 2011 due to battery failure 43137 inactive voice AO-92 435.350 (+67Hz) 145.880 aka FOX-1D, reentered 40967 inactive voice AO-85 435.182 145.980 aka FOX-1A, problem with uplink, 5 Watt often not enough </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. cbff2fae551a493cb08c18ec190a804081ae116e 3816 3815 2025-03-16T10:31:31Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 active voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT 43678 active CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 active AFSK AO-27 145.850 436.795 aka Eyesat-1 40908 active AFSK/GFSK Lilacsat-2 144.350 144.390 beacon at 437.200 </pre> {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |} ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 transponder stopped in Nov 2011 due to battery failure 43137 inactive voice AO-92 435.350 (+67Hz) 145.880 aka FOX-1D, reentered 40967 inactive voice AO-85 435.182 145.980 aka FOX-1A, problem with uplink, 5 Watt often not enough </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 7f6a4ff3cc7c6aa4eff30900a466c449bc3d1731 3817 3816 2025-03-16T10:33:11Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 active voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) 43017 active voice AO-91 435.250 (+67Hz) 145.960 aka FOX-1B RADFXSAT 43678 active CW, 1k2 AFSK PO-101 437.500 145.900 aka DIWATA 2B, callsign D1W2PH 22825 active AFSK AO-27 145.850 436.795 aka Eyesat-1 40908 active AFSK/GFSK Lilacsat-2 144.350 144.390 beacon at 437.200 </pre> {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |urls |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 transponder stopped in Nov 2011 due to battery failure 43137 inactive voice AO-92 435.350 (+67Hz) 145.880 aka FOX-1D, reentered 40967 inactive voice AO-85 435.182 145.980 aka FOX-1A, problem with uplink, 5 Watt often not enough </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 44572372b2bd667238febd11cc8efd7a1e8fff3a 3818 3817 2025-03-16T10:37:09Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 27607 active voice SO-50 145.850 (+67Hz) 436.795 aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) </pre> {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |urls |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |urls |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |urls |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 transponder stopped in Nov 2011 due to battery failure 43137 inactive voice AO-92 435.350 (+67Hz) 145.880 aka FOX-1D, reentered 40967 inactive voice AO-85 435.182 145.980 aka FOX-1A, problem with uplink, 5 Watt often not enough </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 31198f452c86c92290e98279f544c07557e217b7 3819 3818 2025-03-16T10:38:48Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |urls |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |urls |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |urls |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |urls |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== <pre> NORAD Status Mode(s) Name uplink downlink details ----- ------ ------- ---- ------ -------- ------- 51080 inactive voice,fsk SO-115 145.925 436.888 aka HADES, reentered 28375 inactive voice AO-51 144 435 transponder stopped in Nov 2011 due to battery failure 43137 inactive voice AO-92 435.350 (+67Hz) 145.880 aka FOX-1D, reentered 40967 inactive voice AO-85 435.182 145.980 aka FOX-1A, problem with uplink, 5 Watt often not enough </pre> (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. fa7b7f78bb2dc66ab508ba80402646db8dbeebf2 3820 3819 2025-03-16T10:43:18Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |urls |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |urls |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |urls |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |urls |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:green"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |urls |aka HADES, reentered |- |28375 |style="color:green"|Inactive |voice |AO-51 |144 |435 |urls |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |urls |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |urls |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with AO-91 you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 7f7cb7720a669dfc743691852d4f574ce8ecbbc5 3821 3820 2025-03-16T10:44:04Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |urls |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |urls |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |urls |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |urls |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:green"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |urls |aka HADES, reentered |- |28375 |style="color:green"|Inactive |voice |AO-51 |144 |435 |urls |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |urls |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |urls |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your uplink. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. b314d8aef9caf5b6c299a8824bcf0127acefd9fe 3822 3821 2025-03-16T10:44:21Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |urls |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |urls |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |urls |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |urls |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:green"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |urls |aka HADES, reentered |- |28375 |style="color:green"|Inactive |voice |AO-51 |144 |435 |urls |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |urls |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |urls |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 55b392db783bca32e697fd5cd94083b5312dec32 3823 3822 2025-03-16T10:44:44Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |urls |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |urls |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |urls |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |urls |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |urls |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |urls |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |urls |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |urls |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 33b2bca68a4b90ce95640e94f71534e5d977b884 3824 3823 2025-03-16T10:45:53Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |urls |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |https://www.heavens-above.com/satinfo.aspx?satid=43017 |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |urls |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |urls |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |urls |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |urls |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |urls |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |urls |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 842c5150de9ba6aaf464cd4219b0160987711879 3825 3824 2025-03-16T10:47:35Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |urls |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |urls |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |urls |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |urls |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |urls |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |urls |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |urls |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. fdd854497c7294d68476014e422e5f7d25463787 3826 3825 2025-03-16T10:49:32Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |urls |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |urls |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |urls |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |urls |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |urls |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |urls |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. e6b8dbe9b9f35f40cff36aeeb07f7fa9811fdfd5 3827 3826 2025-03-16T10:51:03Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 4bb9ad85ef2a284d45f1ff01d85b34b4d89fd775 3828 3827 2025-03-16T20:44:05Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 13808af91a0dad4b70369beac3aa1563d85a8ae2 3829 3828 2025-03-16T20:45:02Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. ac4faf6ce315d81c86dbd8f0e47c19e280584d2f 3830 3829 2025-03-16T20:45:41Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 79e4b1a344dda9e99fb3fd9f53527df0e4c09f69 3831 3830 2025-03-16T20:46:17Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] [https://www.n2yo.com/satellite/?s=22825#results N2YO] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 5c1075710c4764be4541820f4f13e5c97d90171d 3832 3831 2025-03-16T20:46:59Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] [https://www.n2yo.com/satellite/?s=22825#results N2YO] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] [https://www.n2yo.com/satellite/?s=40908#results N2YO] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. ca56d7d05fa43d77b612384f734b8cc902bd136a 3833 3832 2025-03-16T20:48:15Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] [https://www.n2yo.com/satellite/?s=22825#results N2YO] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] [https://www.n2yo.com/satellite/?s=40908#results N2YO] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] [https://www.n2yo.com/satellite/?s=51080#results N2YO] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] [https://www.n2yo.com/satellite/?s=28375#results N2YO] |transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] [https://www.n2yo.com/satellite/?s=43137#results N2YO] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] [https://www.n2yo.com/satellite/?s=40967#results N2YO] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 137d9a509cf6c9445f545031b770a5a9ad0fdf54 3834 3833 2025-03-16T20:49:22Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] [https://www.n2yo.com/satellite/?s=22825#results N2YO] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] [https://www.n2yo.com/satellite/?s=40908#results N2YO] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Inactive |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] [https://www.n2yo.com/satellite/?s=51080#results N2YO] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] [https://www.n2yo.com/satellite/?s=28375#results N2YO] |aka AMSAT ECHO, transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Inctive |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] [https://www.n2yo.com/satellite/?s=43137#results N2YO] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] [https://www.n2yo.com/satellite/?s=40967#results N2YO] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. 2503468fc5fda27a4536dd9fde7c744291d4d90b Satellites 0 915 3835 3834 2025-03-16T20:50:27Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] [https://www.n2yo.com/satellite/?s=22825#results N2YO] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] [https://www.n2yo.com/satellite/?s=40908#results N2YO] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Reentered |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] [https://www.n2yo.com/satellite/?s=51080#results N2YO] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] [https://www.n2yo.com/satellite/?s=28375#results N2YO] |aka AMSAT ECHO, transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Reentered |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] [https://www.n2yo.com/satellite/?s=43137#results N2YO] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] [https://www.n2yo.com/satellite/?s=40967#results N2YO] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. b347f34e317e7c60e5a9c1be67843023b254984b 3836 3835 2025-03-17T00:11:03Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] [https://www.n2yo.com/satellite/?s=22825#results N2YO] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] [https://www.n2yo.com/satellite/?s=40908#results N2YO] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Reentered |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] [https://www.n2yo.com/satellite/?s=51080#results N2YO] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] [https://www.n2yo.com/satellite/?s=28375#results N2YO] |aka AMSAT ECHO, transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Reentered |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] [https://www.n2yo.com/satellite/?s=43137#results N2YO] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] [https://www.n2yo.com/satellite/?s=40967#results N2YO] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. Example frequencies for working SO-50 <pre> TX uplink RX downlink Details AOS 145.850 +74.4Hz Resets 10-minute timer 145.850 +67.0Hz 436.805 145.850 +67.0Hz 436.800 max alt 145.850 +67.0Hz 436.795 145.850 +67.0Hz 436.790 LOS 145.850 +67.0Hz 436.785 <pre> 0757592324bb0f3bf0ca842b45d4aca63f249e18 3837 3836 2025-03-21T07:59:52Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] [https://www.n2yo.com/satellite/?s=22825#results N2YO] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] [https://www.n2yo.com/satellite/?s=40908#results N2YO] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Reentered |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] [https://www.n2yo.com/satellite/?s=51080#results N2YO] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] [https://www.n2yo.com/satellite/?s=28375#results N2YO] |aka AMSAT ECHO, transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Reentered |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] [https://www.n2yo.com/satellite/?s=43137#results N2YO] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] [https://www.n2yo.com/satellite/?s=40967#results N2YO] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. Example frequencies for working SO-50 <pre> RX downlink TX uplink Details AOS 145.850 +74.4Hz Resets 10-minute timer 436.805 145.850 +67.0Hz 436.800 145.850 +67.0Hz max alt 436.795 145.850 +67.0Hz 436.790 145.850 +67.0Hz LOS 436.785 145.850 +67.0Hz <pre> Example frequencies for working AO-91 <pre> RX downlink TX uplink Details AOS 145.960 435.240 +67.0Hz 145.960 435.245 +67.0Hz max alt 145.960 435.250 +67.0Hz 145.960 435.255 +67.0Hz LOS 145.960 435.260 +67.0Hz <pre> ea12c5c7e0600f99a002fa066b53d489b925b1d3 3838 3837 2025-03-21T08:00:20Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |145.850 (+67Hz) |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |435.250 (+67Hz) |145.960 |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |437.500 |145.900 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |145.850 |436.795 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] [https://www.n2yo.com/satellite/?s=22825#results N2YO] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.350 |144.390 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] [https://www.n2yo.com/satellite/?s=40908#results N2YO] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Reentered |voice,FSK |SO-115 |145.925 |436.888 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] [https://www.n2yo.com/satellite/?s=51080#results N2YO] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |144 |435 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] [https://www.n2yo.com/satellite/?s=28375#results N2YO] |aka AMSAT ECHO, transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Reentered |voice |AO-92 |435.350 (+67Hz) |145.880 |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] [https://www.n2yo.com/satellite/?s=43137#results N2YO] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |435.182 |145.980 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] [https://www.n2yo.com/satellite/?s=40967#results N2YO] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. Example frequencies for working SO-50 <pre> RX downlink TX uplink Details AOS 145.850 +74.4Hz Resets 10-minute timer 436.805 145.850 +67.0Hz 436.800 145.850 +67.0Hz max alt 436.795 145.850 +67.0Hz 436.790 145.850 +67.0Hz LOS 436.785 145.850 +67.0Hz </pre> Example frequencies for working AO-91 <pre> RX downlink TX uplink Details AOS 145.960 435.240 +67.0Hz 145.960 435.245 +67.0Hz max alt 145.960 435.250 +67.0Hz 145.960 435.255 +67.0Hz LOS 145.960 435.260 +67.0Hz </pre> 4bf174971e3df3a4041c0f3f131fd8f219dcd196 3839 3838 2025-03-21T08:08:18Z Admin 1 wikitext text/x-wiki Amateur Radio FM Satellites ===Active:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |27607 |style="color:green"|Active |voice |SO-50 |436.795 |145.850 (+67Hz) |[https://www.heavens-above.com/satinfo.aspx?satid=27607 HA] [https://www.n2yo.com/satellite/?s=27607#results N2YO] |aka Saudisat 1C Oscar, use 145.850 +74.4 Hz to 'unlock' the repeater for 10 mins (if no activity) |- |43017 |style="color:green"|Active |voice |AO-91 |145.960 |435.250 (+67Hz) |[https://www.heavens-above.com/satinfo.aspx?satid=43017 HA] [https://www.n2yo.com/satellite/?s=43017 N2YO] |aka FOX-1B, RADFXSAT |- |43678 |style="color:green"|Active |CW/1k2/AFSK |PO-101 |145.900 |437.500 |[https://www.heavens-above.com/satinfo.aspx?satid=43678 HA] [https://www.n2yo.com/satellite/?s=43678#results N2YO] |aka DIWATA 2B, callsign D1W2PH |- |22825 |style="color:green"|Active |AFSK |AO-27 |436.795 |145.850 |[https://www.heavens-above.com/satinfo.aspx?satid=22825 HA] [https://www.n2yo.com/satellite/?s=22825#results N2YO] |aka Eyesat-1 |- |40908 |style="color:green"|Active |AFSK/GFSK |Lilacsat-2 |144.390 |144.350 |[https://www.heavens-above.com/satinfo.aspx?satid=40908 HA] [https://www.n2yo.com/satellite/?s=40908#results N2YO] |beacon at 437.200 |} ===Inactive:=== {| style="background-color:#f9f9f9;" cellpadding="10" cellspacing="0" border="1" |style="background-color:#f2f2f2;"|<b>NORAD</b> |style="background-color:#f2f2f2;"|<b>Status</b> |style="background-color:#f2f2f2;"|<b>Mode(s)</b> |style="background-color:#f2f2f2;"|<b>Name</b> |style="background-color:#f2f2f2;"|<b>Downlink</b> |style="background-color:#f2f2f2;"|<b>Uplink</b> |style="background-color:#f2f2f2;"|<b>URL(s)</b> |style="background-color:#f2f2f2;"|<b>Details</b> |- |51080 |style="color:red"|Reentered |voice,FSK |SO-115 |436.888 |145.925 |[https://www.heavens-above.com/satinfo.aspx?satid=51080 HA] [https://www.n2yo.com/satellite/?s=51080#results N2YO] |aka HADES, reentered |- |28375 |style="color:red"|Inactive |voice |AO-51 |435 |144 |[https://www.heavens-above.com/satinfo.aspx?satid=28375 HA] [https://www.n2yo.com/satellite/?s=28375#results N2YO] |aka AMSAT ECHO, transponder stopped in Nov 2011 due to battery failure |- |43137 |style="color:red"|Reentered |voice |AO-92 |145.880 |435.350 (+67Hz) |[https://www.heavens-above.com/satinfo.aspx?satid=43137 HA] [https://www.n2yo.com/satellite/?s=43137#results N2YO] |aka FOX-1D, reentered |- |40967 |style="color:red"|Inactive |voice |AO-85 |145.980 |435.182 |[https://www.heavens-above.com/satinfo.aspx?satid=40967 HA] [https://www.n2yo.com/satellite/?s=40967#results N2YO] |aka FOX-1A, problem with uplink, 5 Watts often not enough |} (Status was last checked on 2025-03-16 using information available from the various satellite organisations, this is not indicative whether you'll be able to make a successful connection to it) ===Frequency offset=== Add or subtract about 15kHz to compensate for the doppler effect offset is more pronounced on higher frequencies, so with 70cm uplinks you need to be fairly precise with your frequencies. In these cases, a duplex radio (listen while you transmit) is desirable to confirm you can be heard. Example frequencies for working SO-50 <pre> RX downlink TX uplink Details AOS 145.850 +74.4Hz Resets 10-minute timer 436.805 145.850 +67.0Hz 436.800 145.850 +67.0Hz max alt 436.795 145.850 +67.0Hz 436.790 145.850 +67.0Hz LOS 436.785 145.850 +67.0Hz </pre> Example frequencies for working AO-91 <pre> RX downlink TX uplink Details AOS 145.960 435.240 +67.0Hz 145.960 435.245 +67.0Hz max alt 145.960 435.250 +67.0Hz 145.960 435.255 +67.0Hz LOS 145.960 435.260 +67.0Hz </pre> 4293010b6ea7fba2cc6c2e5ed29864a0591d6306 Main Page 0 1 3840 3775 2025-03-21T21:44:56Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Astronomy]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around April 2025. Click here for the KiwiSDR waterfall page: http://www.marcelpost.com:8073 [[File:Kiwisdr-waterfall.jpg|left|link=http://www.marcelpost.com:8073]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ a949083286f93953c56ca49e52e950341d15d11e 3841 3840 2025-03-22T02:00:32Z Admin 1 wikitext text/x-wiki Welcome to the Marcelpost.com Wiki Pages! For those pages and topics that need a more formal look I have set up this mediaWiki instance. At present only a few pages are set up but over time it should contain pages in the following categories: * [[Electronics]] * [[Computers]] * [[Programs]] * [[Linux info]] * [[Amateur Radio]] * [[Astronomy]] * [[Quadcopters]] * [[Docs and Howto's]] * [[WebLinks]] * [[Movies]] * [[RealEstate]] * [[Nature]] * [[Oddities]] The KiwiSDR site is currently under maintenance. We should be back around April 2025. Click here for the KiwiSDR waterfall page: http://net.marcelpost.com:8073 [[File:Kiwisdr-waterfall.jpg|left|link=http://net.marcelpost.com:8073]] For your KiwiSDR needs, you may find an alternative station by following the link below. List of all publicly available KiwiSDR stations: http://kiwisdr.com/public/ 77e6b5a3741b33c62863438bc9fd8526e8d78746